home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume10 / pcmail2 / part02 < prev    next >
Encoding:
Text File  |  1990-01-24  |  64.8 KB  |  2,484 lines

  1. Newsgroups: comp.sources.misc
  2. subject: v10i034: PC-MAIL release 2, 2/11
  3. from: wswietse@lso.win.tue.nl (Wietse Venema)
  4. Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  5.  
  6. Posting-number: Volume 10, Issue 34
  7. Submitted-by: wswietse@lso.win.tue.nl (Wietse Venema)
  8. Archive-name: pcmail2/part02
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 2 (of 11)."
  17. # Contents:  FILES daemon/dosunix.c daemon/mtime.c daemon/pc-mail.8
  18. #   daemon/pc-maild.8 daemon/syslog.c main/DEFAULT.bat main/GNUUCP.bat
  19. #   main/SLAVE.bat main/call.c main/comm.h main/create.c main/defs.h
  20. #   main/kp.h main/mailfile.c main/makework.c main/newseqno.c
  21. #   main/pager.h main/params.h main/protomsg.c main/rmtname.c
  22. #   main/sysdep.c main/window.h termcap/console.c
  23. # Wrapped by wswietse@tuewsa on Mon Jan 22 17:27:13 1990
  24. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  25. if test -f FILES -a "${1}" != "-c" ; then 
  26.   echo shar: Will not over-write existing file \"FILES\"
  27. else
  28. echo shar: Extracting \"FILES\" \(2011 characters\)
  29. sed "s/^X//" >FILES <<'END_OF_FILES'
  30. XFEATURES
  31. XFILES
  32. XREADME
  33. Xaux
  34. Xdaemon
  35. Xmain
  36. Xtermcap
  37. Xtermcap/README
  38. Xtermcap/buildall.bat
  39. Xtermcap/console.c
  40. Xtermcap/makefile.msc
  41. Xtermcap/termcap.h
  42. Xtermcap/tgetent.c
  43. Xtermcap/tgetflag.c
  44. Xtermcap/tgetnum.c
  45. Xtermcap/tgetstr.c
  46. Xtermcap/tgoto.c
  47. Xtermcap/tputs.c
  48. Xaux/README
  49. Xaux/detab.c
  50. Xaux/makefile
  51. Xaux/srctoman.sh
  52. Xdaemon/DAEMON.ins
  53. Xdaemon/Makefile
  54. Xdaemon/README
  55. Xdaemon/dosunix.c
  56. Xdaemon/dosunix.h
  57. Xdaemon/ms_parse.c
  58. Xdaemon/ms_parse.h
  59. Xdaemon/mtime.c
  60. Xdaemon/mtime.h
  61. Xdaemon/pc-mail.8
  62. Xdaemon/pc-mail.c
  63. Xdaemon/pc-maild.8
  64. Xdaemon/pc-maild.c
  65. Xdaemon/percentm.c
  66. Xdaemon/percentm.h
  67. Xdaemon/sysexits.h
  68. Xdaemon/syslog.c
  69. Xdaemon/syslog.h
  70. Xdaemon/util.c
  71. Xdaemon/util.h
  72. Xmain/Beware
  73. Xmain/DEFAULT.bat
  74. Xmain/DEFAULT.ins
  75. Xmain/GNUUCP.bat
  76. Xmain/GNUUCP.ins
  77. Xmain/Implement
  78. Xmain/PORTING
  79. Xmain/README
  80. Xmain/SLAVE.bat
  81. Xmain/SLAVE.ins
  82. Xmain/alias.c
  83. Xmain/ascf.c
  84. Xmain/ascf.h
  85. Xmain/call.c
  86. Xmain/clmap.h
  87. Xmain/cmail.c
  88. Xmain/comm.c
  89. Xmain/comm.h
  90. Xmain/comport.asm
  91. Xmain/comport.h
  92. Xmain/connect.c
  93. Xmain/create.c
  94. Xmain/defs.h
  95. Xmain/desk.c
  96. Xmain/deskutil.c
  97. Xmain/deskutil.h
  98. Xmain/edit.c
  99. Xmain/email.c
  100. Xmain/errdisp.c
  101. Xmain/file.c
  102. Xmain/getwork.c
  103. Xmain/gmail.c
  104. Xmain/gp.h
  105. Xmain/gphys.c
  106. Xmain/gpres.c
  107. Xmain/gtrans.c
  108. Xmain/hsearch.3
  109. Xmain/hsearch.c
  110. Xmain/hsearch.h
  111. Xmain/invoke.c
  112. Xmain/kbdinp.c
  113. Xmain/kbdinp.h
  114. Xmain/kio.c
  115. Xmain/kp.h
  116. Xmain/kphys.c
  117. Xmain/kpres.c
  118. Xmain/kproto.ms
  119. Xmain/ktrans.c
  120. Xmain/lmail.c
  121. Xmain/logs.c
  122. Xmain/logs.h
  123. Xmain/mail.c
  124. Xmain/mail.h
  125. Xmain/mailfile.c
  126. Xmain/makefile.msc
  127. Xmain/makefile.unx
  128. Xmain/makework.c
  129. Xmain/mbox.c
  130. Xmain/ms_parse.c
  131. Xmain/ms_parse.h
  132. Xmain/msd_dir.c
  133. Xmain/msd_dir.h
  134. Xmain/myalloc.c
  135. Xmain/ndir.c
  136. Xmain/ndir.h
  137. Xmain/newseqno.c
  138. Xmain/nmail.c
  139. Xmain/pager.c
  140. Xmain/pager.h
  141. Xmain/params.c
  142. Xmain/params.h
  143. Xmain/path.c
  144. Xmain/path.h
  145. Xmain/protomsg.c
  146. Xmain/reply.c
  147. Xmain/rmtname.c
  148. Xmain/scanwork.c
  149. Xmain/screen.c
  150. Xmain/screen.h
  151. Xmain/sendwork.c
  152. Xmain/setup.c
  153. Xmain/smail.c
  154. Xmain/snapshot.c
  155. Xmain/snapshot.h
  156. Xmain/spoolfil.c
  157. Xmain/startup.c
  158. Xmain/status.h
  159. Xmain/str.c
  160. Xmain/submit.c
  161. Xmain/switcher.c
  162. Xmain/sysdep.c
  163. Xmain/sysdep.h
  164. Xmain/textcopy.c
  165. Xmain/tutorial.ms
  166. Xmain/unalias.c
  167. Xmain/window.c
  168. Xmain/window.h
  169. Xmain/work.h
  170. Xmain/xpres.c
  171. END_OF_FILES
  172. if test 2011 -ne `wc -c <FILES`; then
  173.     echo shar: \"FILES\" unpacked with wrong size!
  174. fi
  175. # end of overwriting check
  176. fi
  177. if test -f daemon/dosunix.c -a "${1}" != "-c" ; then 
  178.   echo shar: Will not over-write existing file \"daemon/dosunix.c\"
  179. else
  180. echo shar: Extracting \"daemon/dosunix.c\" \(2720 characters\)
  181. sed "s/^X//" >daemon/dosunix.c <<'END_OF_daemon/dosunix.c'
  182. X/*++
  183. X/* NAME
  184. X/*    dosunix 3
  185. X/* SUMMARY
  186. X/*    UNIX <-> MS-DOS text format conversion
  187. X/* PROJECT
  188. X/*    pc-mail
  189. X/* PACKAGE
  190. X/*    nfs
  191. X/* SYNOPSIS
  192. X/*    #include <stdio.h>
  193. X/*    #include "dosunix.h"
  194. X/*
  195. X/*    int dos2unix(ifp, ofp)
  196. X/*    FILE *ifp;
  197. X/*    FILE *ofp;
  198. X/*
  199. X/*    int unix2dos(ifp, ofp)
  200. X/*    FILE *ifp;
  201. X/*    FILE *ofp;
  202. X/*
  203. X/*    char *dosgets(buf, len, fp)
  204. X/*    char *buf;
  205. X/*    unsigned len;
  206. X/*    FILE *fp;
  207. X/* DESCRIPTION
  208. X/*    dos2unix() converts an MS-DOS text stream (with cr/lf-delimited
  209. X/*    lines) to a UNIX style stream (with lf-delimited lines).
  210. X/*
  211. X/*    unix2dos() performs the opposite function as dos2unix().
  212. X/*
  213. X/*    dosgets() reads one line from the designated stream and strips
  214. X/*    off any cr of lf characters.
  215. X/* DIAGNOSTICS
  216. X/*    dos2unix(), unix2dos() return a nonzero value if an error was detected.
  217. X/*
  218. X/*    dosgets() returns (char *) 0 if it could not read any data.
  219. X/* BUGS
  220. X/*    Very long lines will be broken; Ctrl-Z in MS-DOS files is not
  221. X/*    given special treatment, nor will it be added to the end of
  222. X/*    MS-DOS files.
  223. X/* AUTHOR(S)
  224. X/*    Wietse Z. Venema
  225. X/*    Eindhoven University of Technology
  226. X/*    Department of Mathematics and Computer Science
  227. X/*    Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  228. X/* CREATION DATE
  229. X/*    Sun Oct 29 16:41:50 MET 1989
  230. X/* LAST MODIFICATION
  231. X/*    10/29/89 22:30:00
  232. X/* VERSION/RELEASE
  233. X/*    1.1
  234. X/*--*/
  235. X
  236. X#ifndef lint
  237. Xstatic char sccsid[] = "@(#) dosunix.c 1.1 10/29/89 22:30:00";
  238. X
  239. X#endif
  240. X
  241. X#include <stdio.h>
  242. X#include "dosunix.h"            /* consistency check */
  243. X
  244. Xextern char *strchr();
  245. Xextern char *fgets();
  246. X
  247. X/* unix2dos - copy UNIX-format stream to MS-DOS-format stream */
  248. X
  249. Xint     unix2dos(ifp, ofp)
  250. XFILE   *ifp;
  251. XFILE   *ofp;
  252. X{
  253. X    static char buf[BUFSIZ];
  254. X    register int end;
  255. X
  256. X    while (fgets(buf, sizeof(buf), ifp)) {
  257. X    if (buf[end = strlen(buf) - 1] == '\n') {
  258. X        buf[end] = '\r';
  259. X        (void) fputs(buf, ofp);
  260. X        (void) putc('\n', ofp);
  261. X    } else {
  262. X        (void) fputs(buf, ofp);
  263. X    }
  264. X    }
  265. X    return (fflush(ofp) || ferror(ofp) || feof(ofp));
  266. X}
  267. X
  268. X/* dos2unix - copy MS-DOS-format text stream to UNIX-format text stream */
  269. X
  270. Xint     dos2unix(dfp, pfp)
  271. Xregister FILE *dfp;
  272. Xregister FILE *pfp;
  273. X{
  274. X    static char msgbuf[BUFSIZ];        /* copy buffer */
  275. X
  276. X    while (dosgets(msgbuf, sizeof(msgbuf), dfp)) {
  277. X    (void) fputs(msgbuf, pfp);
  278. X    (void) putc('\n', pfp);
  279. X    }
  280. X    return (fflush(pfp) || ferror(pfp) || feof(pfp));
  281. X}
  282. X
  283. X/* dosgets - read one line from DOS-format text stream; strip cr and lf */
  284. X
  285. Xchar   *dosgets(buf, len, fp)
  286. Xregister char *buf;
  287. Xunsigned len;
  288. Xregister FILE *fp;
  289. X{
  290. X    register char *cp;
  291. X    register char *ret;
  292. X
  293. X    /* Lines with >= len characters will be broken */
  294. X
  295. X    if ((ret = fgets(buf, len, fp))
  296. X    && ((cp = strchr(buf, '\r')) || (cp = strchr(buf, '\n'))))
  297. X    *cp = '\0';                /* strip cr or lf */
  298. X    return (ret);
  299. X}
  300. X
  301. END_OF_daemon/dosunix.c
  302. if test 2720 -ne `wc -c <daemon/dosunix.c`; then
  303.     echo shar: \"daemon/dosunix.c\" unpacked with wrong size!
  304. fi
  305. # end of overwriting check
  306. fi
  307. if test -f daemon/mtime.c -a "${1}" != "-c" ; then 
  308.   echo shar: Will not over-write existing file \"daemon/mtime.c\"
  309. else
  310. echo shar: Extracting \"daemon/mtime.c\" \(2331 characters\)
  311. sed "s/^X//" >daemon/mtime.c <<'END_OF_daemon/mtime.c'
  312. X/*++
  313. X/* NAME
  314. X/*    mtime 3
  315. X/* SUMMARY
  316. X/*    maintain modification times of files
  317. X/* PROJECT
  318. X/*    pc-mail
  319. X/* PACKAGE
  320. X/*    nfs
  321. X/* SYNOPSIS
  322. X/*    #include "mtime.h"
  323. X/*
  324. X/*    MTIME *mtime(path)
  325. X/*    char *path;
  326. X/* DESCRIPTION
  327. X/*    mtime() maintains a table of modification times of files.
  328. X/*    If a new file name is given, a modification time of 0 is
  329. X/*    assumed (the UNIX equivalent of "a very long time ago").
  330. X/*
  331. X/*    If, for whatever reason, no memory can be allocated to update the
  332. X/*    symbol table, a dummy entry is returned with modification time of 0.
  333. X/* DIAGNOSTICS
  334. X/*    Diagnostics are logged with the syslog(3) facility. The program
  335. X/*    tries to continue to run as long as possible.
  336. X/* BUGS
  337. X/*    The dummy entry is stored in static memory; its value may be
  338. X/*    overwritten an any time.
  339. X/* AUTHOR(S)
  340. X/*    Wietse Z. Venema
  341. X/*    Eindhoven University of Technology
  342. X/*    Department of Mathematics and Computer Science
  343. X/*    Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  344. X/* CREATION DATE
  345. X/*    Sun Oct 29 15:48:01 MET 1989
  346. X/* LAST MODIFICATION DATE
  347. X/*    10/29/89 22:29:56
  348. X/* VERSION/RELEASE
  349. X/*    1.1
  350. X/*--*/
  351. X
  352. X#ifndef lint
  353. Xstatic char sccsid[] = "@(#) mtime.c 1.1 10/29/89 22:29:56";
  354. X
  355. X#endif
  356. X
  357. X#ifdef SYSLOG
  358. X#include <syslog.h>
  359. X#else
  360. X#include "syslog.h"
  361. X#endif
  362. X
  363. X#include "mtime.h"
  364. X
  365. Xextern char *malloc();
  366. Xextern char *strcpy();
  367. X
  368. XMTIME  *mtime_tree;            /* head of symbol table */
  369. X
  370. X/* findtime - actual symbol-table access routine */
  371. X
  372. XMTIME  *findtime(path, tree)
  373. Xregister char *path;
  374. Xregister MTIME *tree;
  375. X{
  376. X    register int direct;
  377. X    static MTIME dummy;
  378. X
  379. X    /*
  380. X     * We use a trivial binary-tree storage scheme. If we cannot get memory
  381. X     * for whatever reason, produce a dummy result. This means we will always
  382. X     * believe that a file has changed. My first excercise in "graceful
  383. X     * degradation".
  384. X     */
  385. X
  386. X    if (tree == 0) {                /* new file */
  387. X    if ((tree = (MTIME *) malloc(sizeof(MTIME))) == 0
  388. X        || (tree->path = malloc(strlen(path) + 1)) == 0) {
  389. X        syslog(LOG_WARNING, "memory allocation failed");
  390. X        dummy.time = 0;
  391. X        tree = &dummy;
  392. X    } else {
  393. X        (void) strcpy(tree->path, path);
  394. X        tree->time = 0;
  395. X        tree->left = tree->rite = 0;
  396. X    }
  397. X    } else if ((direct = strcmp(path, tree->path)) < 0) {
  398. X    tree->left = findtime(path, tree->left);
  399. X    } else if (direct > 0) {
  400. X    tree->rite = findtime(path, tree->rite);
  401. X    }
  402. X    return (tree);
  403. X}
  404. X
  405. END_OF_daemon/mtime.c
  406. if test 2331 -ne `wc -c <daemon/mtime.c`; then
  407.     echo shar: \"daemon/mtime.c\" unpacked with wrong size!
  408. fi
  409. # end of overwriting check
  410. fi
  411. if test -f daemon/pc-mail.8 -a "${1}" != "-c" ; then 
  412.   echo shar: Will not over-write existing file \"daemon/pc-mail.8\"
  413. else
  414. echo shar: Extracting \"daemon/pc-mail.8\" \(1790 characters\)
  415. sed "s/^X//" >daemon/pc-mail.8 <<'END_OF_daemon/pc-mail.8'
  416. X.TH PC-MAIL 8 
  417. X.ad
  418. X.fi
  419. X.SH NAME
  420. Xpc-mail
  421. X\-
  422. Xdeliver mail to nfs-based pc-mail users
  423. X.SH PROJECT
  424. X.na
  425. X.nf
  426. Xpc-mail
  427. X.SH PACKAGE
  428. X.na
  429. X.nf
  430. Xnfs
  431. X.SH SYNOPSIS
  432. X.na
  433. X.nf
  434. Xpc-mail user
  435. X.SH DESCRIPTION
  436. X.ad
  437. X.fi
  438. XThis program is to be run on the nfs server that exports mail
  439. Xdirectories to MS-DOS pc-mail users. The program replaces the
  440. XUNIX -> MS-DOS file transfer function of the MS-DOS \fIcico\fR
  441. Xprogram.
  442. X
  443. XNormally, the pc-mail delivery program is invoked by sendmail(8).
  444. XIts purpose is to deliver new mail in the mail directory of the
  445. Xspecified \fIuser\fR (default /usr/spool/pc-mail/\fIuser\fR).
  446. XAny error conditions detected by the pc-mail delivery program
  447. Xare reported back in a sendmail-compatible manner.
  448. X
  449. XThis program must be run with root privileges. It will assume
  450. Xthe (uid, gid) of the specified user before delivering mail.
  451. X
  452. XThe program attempts to create any missing directories, and to
  453. Xcorrect ownerships or protections where needed.
  454. X.SH FILES
  455. X.na
  456. X.nf
  457. X/usr/spool/pc-mail/\fIuser\fR/nNNNNN, mail message.
  458. X/usr/spool/pc-mail/\fIuser\fR/hNNNNN, sender of message and subject.
  459. X(NNNNN is the pc-mail "message id").
  460. X.SH SEE ALSO
  461. X.na
  462. X.nf
  463. Xpc-maild(1)
  464. X.SH DIAGNOSTICS
  465. X.ad
  466. X.fi
  467. XAll conceivable error conditions cause the program to terminate
  468. Xwith a non-zero exit status, after printing an error message on
  469. Xthe standard error stream, and appending an entry to the system log.
  470. XSee <sysexits.h> for details.
  471. X.SH BUGS
  472. X.ad
  473. X.fi
  474. XThere is no way to notify a pc-mail user of the arrival of new mail.
  475. X.SH AUTHOR(S)
  476. X.na
  477. X.nf
  478. XW.Z. Venema
  479. XEindhoven University of Technology
  480. XDepartment of Mathematics and Computer Science
  481. XDen Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  482. X.SH CREATION DATE
  483. X.na
  484. X.nf
  485. XSun Oct 22 18:00:53 MED 1989
  486. X.SH LAST MODIFICATION
  487. X.na
  488. X.nf
  489. X1/6/90 19:08:13
  490. X.SH VERSION/RELEASE
  491. X.na
  492. X.nf
  493. X1.10
  494. END_OF_daemon/pc-mail.8
  495. if test 1790 -ne `wc -c <daemon/pc-mail.8`; then
  496.     echo shar: \"daemon/pc-mail.8\" unpacked with wrong size!
  497. fi
  498. # end of overwriting check
  499. fi
  500. if test -f daemon/pc-maild.8 -a "${1}" != "-c" ; then 
  501.   echo shar: Will not over-write existing file \"daemon/pc-maild.8\"
  502. else
  503. echo shar: Extracting \"daemon/pc-maild.8\" \(1934 characters\)
  504. sed "s/^X//" >daemon/pc-maild.8 <<'END_OF_daemon/pc-maild.8'
  505. X.TH PC-MAILD 8 
  506. X.ad
  507. X.fi
  508. X.SH NAME
  509. Xpc-maild
  510. X\-
  511. Xdeliver unsent mail
  512. X.SH PROJECT
  513. X.na
  514. X.nf
  515. Xpc-mail
  516. X.SH PACKAGE
  517. X.na
  518. X.nf
  519. Xnfs
  520. X.SH SYNOPSIS
  521. X.na
  522. X.nf
  523. Xpc-maild [delay]
  524. X.SH DESCRIPTION
  525. X.ad
  526. X.fi
  527. XThis program should be run on the nfs file server that exports
  528. Xmail directories to MS-DOS pc-mail users. It replaces the
  529. X(MS-DOS -> UNIX) transmission function of the MS-DOS \fIcico\fR
  530. Xprogram.
  531. X
  532. XThe per-user mail directories (default: /usr/spool/pc-mail/\fIuser\fR)
  533. Xare scanned for outgoing mail every \fIdelay\fR seconds (default: 300).
  534. XWhen outgoing mail is found, it is sent through the UNIX rmail program
  535. X(uucp mail interface) and the corresponding files are removed from the
  536. Xuser\'s mail directory.
  537. X
  538. XThe program should run with root privileges. It will assume
  539. Xthe (uid, gid) of the sending user before accessing mail files.
  540. X.SH COMMANDS
  541. X.na
  542. X.nf
  543. Xrmail(1), uucp mail interface program
  544. X.SH FILES
  545. X.na
  546. X.nf
  547. X/usr/spool/pc-mail/\fIuser\fR/dNNNNN, mail message (unsent mail)
  548. X/usr/spool/pc-mail/\fIuser\fR/xNNNNN, recipients, subject (unsent mail)
  549. X/usr/spool/pc-mail/\fIuser\fR/qNNNNN, mail message (sent mail)
  550. X/usr/spool/pc-mail/\fIuser\fR/rNNNNN, recipients, subject (sent mail)
  551. X(NNNNN is the pc-mail "message id").
  552. X.SH SEE ALSO
  553. X.na
  554. X.nf
  555. Xpc-mail(1)
  556. X.SH DIAGNOSTICS
  557. X.ad
  558. X.fi
  559. XErrors found during initialization cause the program to
  560. Xterminate with a diagnostic on the standard error stream.
  561. XAll other errors are considered transient, i.e. if something
  562. Xfails, it is tried again at a later time.  Where possible,
  563. Xdiagnostics are logged through the syslog facility.
  564. X.SH BUGS
  565. X.ad
  566. X.fi
  567. XScanning mail directories is an inefficient way to detect
  568. Xunsent mail.
  569. X.SH AUTHOR(S)
  570. X.na
  571. X.nf
  572. XW.Z. Venema
  573. XEindhoven University of Technology
  574. XDepartment of Mathematics and Computer Science
  575. XDen Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  576. X.SH CREATION DATE
  577. X.na
  578. X.nf
  579. XSun Oct 22 22:12:15 MED 1989
  580. X.SH LAST MODIFICATION
  581. X.na
  582. X.nf
  583. X1/6/90 19:45:05
  584. X.SH VERSION/RELEASE
  585. X.na
  586. X.nf
  587. X1.6
  588. END_OF_daemon/pc-maild.8
  589. if test 1934 -ne `wc -c <daemon/pc-maild.8`; then
  590.     echo shar: \"daemon/pc-maild.8\" unpacked with wrong size!
  591. fi
  592. # end of overwriting check
  593. fi
  594. if test -f daemon/syslog.c -a "${1}" != "-c" ; then 
  595.   echo shar: Will not over-write existing file \"daemon/syslog.c\"
  596. else
  597. echo shar: Extracting \"daemon/syslog.c\" \(2657 characters\)
  598. sed "s/^X//" >daemon/syslog.c <<'END_OF_daemon/syslog.c'
  599. X/*++
  600. X/* NAME
  601. X/*    syslog 3
  602. X/* SUMMARY
  603. X/*    surrogate BSD4.3 syslog facility
  604. X/* PROJECT
  605. X/*    pc-mail
  606. X/* PACKAGE
  607. X/*    nfs
  608. X/* SYNOPSIS
  609. X/*    include "syslog.h"
  610. X/*
  611. X/*    openlog(name, logopt, facility)
  612. X/*    char *name;
  613. X/*    int logopt;
  614. X/*    int facility;
  615. X/*
  616. X/*    syslog(priority, format, arguments)
  617. X/*    int priority;
  618. X/*    char *format;
  619. X/*
  620. X/*    closelog()
  621. X/* DESCRIPTION
  622. X/*    These functions emulate the BSD4.3 syslog(3) facility. Output is
  623. X/*    written to a system logfile (default /usr/spool/mqueue/syslog).
  624. X/*    That file should have mode 666 (i.e. read/write access permitted
  625. X/*    for everyone).
  626. X/*
  627. X/*    syslog() tries to output the log entry as one big chunk.
  628. X/* FILES
  629. X/*    /usr/spool/mqueue/syslog, system logfile
  630. X/* SEE ALSO
  631. X/*    percentm(3), interprets "%m" sequences in syslog format strings.
  632. X/* BUGS
  633. X/*    The functions use the stdio package. This may cause the program to
  634. X/*    grow unexpectedly.
  635. X/* AUTHOR(S)
  636. X/*    Wietse Z. Venema
  637. X/*    Eindhoven University of Technology
  638. X/*    Department of Mathematics and Computer Science
  639. X/*    Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  640. X/* CREATION DATE
  641. X/*    Sun Oct 29 15:12:57 MET 1989
  642. X/* LAST MODIFICATION
  643. X/*    10/29/89 22:58:33
  644. X/* VERSION/RELEASE
  645. X/*    1.2
  646. X/*--*/
  647. X
  648. X#ifndef SYSLOG
  649. X
  650. X#ifndef lint
  651. Xstatic char sccsid[] = "@(#) syslog.c 1.2 10/29/89 22:58:33";
  652. X
  653. X#endif
  654. X
  655. X#include <stdio.h>
  656. X#include <varargs.h>
  657. X#include <time.h>
  658. X#include "percentm.h"
  659. X
  660. Xextern struct tm *localtime();
  661. Xextern char *asctime();
  662. Xextern long time();
  663. Xextern int errno;
  664. X
  665. X#ifndef SYSLOGFILE
  666. X#define    SYSLOGFILE    "/usr/spool/mqueue/syslog"
  667. X#endif
  668. X
  669. Xstatic char *logname;
  670. X
  671. X/* openlog - initialize syslog facility; ignores all but the "name" argument */
  672. X
  673. X/* ARGSUSED */
  674. X
  675. Xopenlog(name, logopt, facility)
  676. Xchar   *name;
  677. Xint     logopt;
  678. Xint     facility;
  679. X{
  680. X    logname = name;                /* ignore rest */
  681. X}
  682. X
  683. X/* syslog - append entry to system log */
  684. X
  685. X/* VARARGS */
  686. X
  687. Xsyslog(va_alist)
  688. Xva_dcl
  689. X{
  690. X    va_list ap;
  691. X    char   *fmt;
  692. X    char   *percentm();
  693. X    long    secs;
  694. X    char   *date;
  695. X    FILE   *fp;
  696. X    int     err = errno;
  697. X    static char buf[BUFSIZ];
  698. X
  699. X    if (fp = fopen(SYSLOGFILE, "a")) {
  700. X
  701. X    /* Format the time stamp */
  702. X
  703. X    secs = time((long *) 0);
  704. X    date = asctime(localtime(&secs));
  705. X    (void) sprintf(buf, "%2.2s-%3.3s-%2.2s %8.8s %s: ",
  706. X               date + 8, date + 4, date + 22, date + 11, logname);
  707. X
  708. X    /* Format the actual message */
  709. X
  710. X    va_start(ap);
  711. X    (void) va_arg(ap, int);            /* skip priority */
  712. X    fmt = va_arg(ap, char *);
  713. X    (void) vsprintf(buf + strlen(buf), percentm(fmt, err), ap);
  714. X    va_end(ap);
  715. X
  716. X    /* Try to ouput the log entry as one big chunk */
  717. X
  718. X    (void) fprintf(fp, "%s\n", buf);
  719. X    (void) fclose(fp);
  720. X    }
  721. X}
  722. X
  723. X/* closelog - a real dummy */
  724. X
  725. Xcloselog()
  726. X{
  727. X    /* no-op */
  728. X}
  729. X
  730. X#endif                    /* SYSLOG */
  731. X
  732. END_OF_daemon/syslog.c
  733. if test 2657 -ne `wc -c <daemon/syslog.c`; then
  734.     echo shar: \"daemon/syslog.c\" unpacked with wrong size!
  735. fi
  736. # end of overwriting check
  737. fi
  738. if test -f main/DEFAULT.bat -a "${1}" != "-c" ; then 
  739.   echo shar: Will not over-write existing file \"main/DEFAULT.bat\"
  740. else
  741. echo shar: Extracting \"main/DEFAULT.bat\" \(2733 characters\)
  742. sed "s/^X//" >main/DEFAULT.bat <<'END_OF_main/DEFAULT.bat'
  743. Xcl -c cico.c
  744. Xmasm comport.asm ;
  745. Xcl -c comm.c
  746. Xcl -c connect.c
  747. Xcl -c getwork.c
  748. Xcl -c kphys.c
  749. Xcl -c kpres.c
  750. Xcl -c ktrans.c
  751. Xdel cilib1.lib
  752. Xlib cilib1.lib comm.obj connect.obj getwork.obj kphys.obj kpres.obj ktrans.obj ;
  753. Xcl -c logs.c
  754. Xcl -c newseqno.c
  755. Xcl -c protomsg.c
  756. Xcl -c rmtname.c
  757. Xcl -c scanwork.c
  758. Xcl -c gphys.c
  759. Xdel cilib2.lib
  760. Xlib cilib2.lib logs.obj newseqno.obj protomsg.obj rmtname.obj scanwork.obj gphys.obj ;
  761. Xcl -c sendwork.c
  762. Xcl -c startup.c
  763. Xcl -c switcher.c
  764. Xcl -c xpres.c
  765. Xcl -c gpres.c
  766. Xcl -c gtrans.c
  767. Xdel cilib3.lib
  768. Xlib cilib3.lib sendwork.obj startup.obj switcher.obj xpres.obj gpres.obj gtrans.obj ;
  769. Xcl -c msd_dir.c
  770. Xcl -c myalloc.c
  771. Xcl -c params.c
  772. Xcl -c path.c
  773. Xcl -c ascf.c
  774. Xcl -c spoolfil.c
  775. Xcl -c str.c
  776. Xcl -c ms_parse.c
  777. Xdel libgen.lib
  778. Xlib libgen msd_dir.obj myalloc.obj params.obj path.obj newseqno.obj ascf.obj spoolfil.obj str.obj ms_parse.obj ;
  779. Xcl -F 2000 -o cico.exe cico.obj comport.obj -link cilib1.lib cilib2.lib cilib3.lib libgen.lib
  780. Xexepack cico.exe junk
  781. Xdel cico.exe
  782. Xren junk cico.exe
  783. X
  784. Xcl -Ml -c mail.c
  785. Xcl -Ml -c call.c
  786. Xcl -Ml -c email.c
  787. Xcl -Ml -c file.c
  788. Xcl -Ml -c screen.c
  789. Xcl -Ml -c mbox.c
  790. Xcl -Ml -c desk.c
  791. Xcl -Ml -c reply.c
  792. Xdel shlib1.lib
  793. Xlib shlib1.lib call.obj email.obj file.obj screen.obj mbox.obj desk.obj reply.obj ;
  794. Xcl -Ml -c create.c
  795. Xcl -Ml -c kbdinp.c
  796. Xcl -Ml -c pager.c
  797. Xcl -Ml -c window.c
  798. Xcl -Ml -c setup.c
  799. Xcl -Ml -c errdisp.c
  800. Xdel shlib2.lib
  801. Xlib shlib2.lib create.obj kbdinp.obj pager.obj window.obj setup.obj errdisp.obj ;
  802. Xcl -Ml -c invoke.c
  803. Xcl -Ml -c textcopy.c
  804. Xcl -Ml -c makework.c
  805. Xcl -Ml -c mailfile.c
  806. Xcl -Ml -c deskutil.c
  807. Xdel shlib3.lib
  808. Xlib shlib3.lib invoke.obj textcopy.obj makework.obj mailfile.obj deskutil.obj ;
  809. Xcl -Ml -c submit.c
  810. Xcl -Ml -c edit.c
  811. Xcl -Ml -c alias.c
  812. Xcl -Ml -c snapshot.c
  813. Xdel shlib4.lib
  814. Xlib shlib4.lib submit.obj edit.obj alias.obj snapshot.obj ;
  815. Xcl -Ml -c msd_dir.c
  816. Xcl -Ml -c myalloc.c
  817. Xcl -Ml -c params.c
  818. Xcl -Ml -c path.c
  819. Xcl -Ml -c newseqno.c
  820. Xcl -Ml -c ascf.c
  821. Xcl -Ml -c spoolfil.c
  822. Xcl -Ml -c str.c
  823. Xcl -Ml -c ms_parse.c
  824. Xdel libgen.lib
  825. Xlib libgen msd_dir.obj myalloc.obj params.obj path.obj newseqno.obj ascf.obj spoolfil.obj str.obj ms_parse.obj ;
  826. Xcl -F 2000 -Ml -o mail.exe mail.obj -link shlib1.lib shlib2.lib shlib3.lib shlib4.lib libgen.lib ..\termcap\termcap.lib
  827. Xexepack mail.exe junk
  828. Xdel mail.exe
  829. Xren junk mail.exe
  830. Xcl -Ml -c smail.c
  831. Xcl -Ml -c unalias.c
  832. Xcl -Ml -c hsearch.c
  833. Xcl -F 2000 -Ml -o smail.exe smail.obj unalias.obj hsearch.obj -link libgen.lib
  834. Xexepack smail.exe junk
  835. Xdel smail.exe
  836. Xren junk smail.exe
  837. Xcl -Ml -c nmail.c
  838. Xcl -F 2000 -Ml -o nmail.exe nmail.obj -link libgen.lib
  839. Xexepack nmail.exe junk
  840. Xdel nmail.exe
  841. Xren junk nmail.exe
  842. Xcl -Ml -c cmail.c
  843. Xcl -F 2000 -Ml -o cmail.exe cmail.obj invoke.obj -link libgen.lib
  844. Xexepack cmail.exe junk
  845. Xdel cmail.exe
  846. Xren junk cmail.exe
  847. END_OF_main/DEFAULT.bat
  848. if test 2733 -ne `wc -c <main/DEFAULT.bat`; then
  849.     echo shar: \"main/DEFAULT.bat\" unpacked with wrong size!
  850. fi
  851. # end of overwriting check
  852. fi
  853. if test -f main/GNUUCP.bat -a "${1}" != "-c" ; then 
  854.   echo shar: Will not over-write existing file \"main/GNUUCP.bat\"
  855. else
  856. echo shar: Extracting \"main/GNUUCP.bat\" \(2342 characters\)
  857. sed "s/^X//" >main/GNUUCP.bat <<'END_OF_main/GNUUCP.bat'
  858. Xcl -DDAEMON -Ml -c mail.c
  859. Xcl -DDAEMON -Ml -c call.c
  860. Xcl -DDAEMON -Ml -c email.c
  861. Xcl -DDAEMON -Ml -c file.c
  862. Xcl -DDAEMON -Ml -c screen.c
  863. Xcl -DDAEMON -Ml -c mbox.c
  864. Xcl -DDAEMON -Ml -c desk.c
  865. Xcl -DDAEMON -Ml -c reply.c
  866. Xdel shlib1.lib
  867. Xlib shlib1.lib call.obj email.obj file.obj screen.obj mbox.obj desk.obj reply.obj ;
  868. Xcl -DDAEMON -Ml -c create.c
  869. Xcl -DDAEMON -Ml -c kbdinp.c
  870. Xcl -DDAEMON -Ml -c pager.c
  871. Xcl -DDAEMON -Ml -c window.c
  872. Xcl -DDAEMON -Ml -c setup.c
  873. Xcl -DDAEMON -Ml -c errdisp.c
  874. Xdel shlib2.lib
  875. Xlib shlib2.lib create.obj kbdinp.obj pager.obj window.obj setup.obj errdisp.obj ;
  876. Xcl -DDAEMON -Ml -c invoke.c
  877. Xcl -DDAEMON -Ml -c textcopy.c
  878. Xcl -DDAEMON -Ml -c makework.c
  879. Xcl -DDAEMON -Ml -c mailfile.c
  880. Xcl -DDAEMON -Ml -c deskutil.c
  881. Xdel shlib3.lib
  882. Xlib shlib3.lib invoke.obj textcopy.obj makework.obj mailfile.obj deskutil.obj ;
  883. Xcl -DDAEMON -Ml -c submit.c
  884. Xcl -DDAEMON -Ml -c edit.c
  885. Xcl -DDAEMON -Ml -c alias.c
  886. Xcl -DDAEMON -Ml -c snapshot.c
  887. Xdel shlib4.lib
  888. Xlib shlib4.lib submit.obj edit.obj alias.obj snapshot.obj ;
  889. Xcl -DDAEMON -Ml -c msd_dir.c
  890. Xcl -DDAEMON -Ml -c myalloc.c
  891. Xcl -DDAEMON -Ml -c params.c
  892. Xcl -DDAEMON -Ml -c path.c
  893. Xcl -DDAEMON -Ml -c newseqno.c
  894. Xcl -DDAEMON -Ml -c ascf.c
  895. Xcl -DDAEMON -Ml -c spoolfil.c
  896. Xcl -DDAEMON -Ml -c str.c
  897. Xcl -DDAEMON -Ml -c ms_parse.c
  898. Xdel libgen.lib
  899. Xlib libgen msd_dir.obj myalloc.obj params.obj path.obj newseqno.obj ascf.obj  spoolfil.obj str.obj ms_parse.obj ;
  900. Xcl -F 2000 -Ml -o mail.exe mail.obj -link shlib1.lib shlib2.lib shlib3.lib shlib4.lib libgen.lib ..\termcap\termcap.lib
  901. Xexepack mail.exe junk
  902. Xdel mail.exe
  903. Xren junk mail.exe
  904. Xcl -DDAEMON -Ml -c smail.c
  905. Xcl -DDAEMON -Ml -c unalias.c
  906. Xcl -DDAEMON -Ml -c hsearch.c
  907. Xcl -F 2000 -Ml -o smail.exe smail.obj unalias.obj hsearch.obj -link libgen.lib
  908. Xexepack smail.exe junk
  909. Xdel smail.exe
  910. Xren junk smail.exe
  911. Xcl -DDAEMON -Ml -c nmail.c
  912. Xcl -F 2000 -Ml -o nmail.exe nmail.obj -link libgen.lib
  913. Xexepack nmail.exe junk
  914. Xdel nmail.exe
  915. Xren junk nmail.exe
  916. Xcl -DDAEMON -Ml -c cmail.c
  917. Xcl -F 2000 -Ml -o cmail.exe cmail.obj invoke.obj -link libgen.lib
  918. Xexepack cmail.exe junk
  919. Xdel cmail.exe
  920. Xren junk cmail.exe
  921. Xcl -DDAEMON -Ml -c gmail.c
  922. Xcl -F 2000 -Ml -o gmail.exe gmail.obj -link libgen.lib
  923. Xexepack gmail.exe junk
  924. Xdel gmail.exe
  925. Xren junk gmail.exe
  926. Xcl -DDAEMON -Ml -c lmail.c
  927. Xcl -F 2000 -Ml -o lmail.exe lmail.obj -link libgen.lib
  928. Xexepack lmail.exe junk
  929. Xdel lmail.exe
  930. Xren junk lmail.exe
  931. END_OF_main/GNUUCP.bat
  932. if test 2342 -ne `wc -c <main/GNUUCP.bat`; then
  933.     echo shar: \"main/GNUUCP.bat\" unpacked with wrong size!
  934. fi
  935. # end of overwriting check
  936. fi
  937. if test -f main/SLAVE.bat -a "${1}" != "-c" ; then 
  938.   echo shar: Will not over-write existing file \"main/SLAVE.bat\"
  939. else
  940. echo shar: Extracting \"main/SLAVE.bat\" \(2066 characters\)
  941. sed "s/^X//" >main/SLAVE.bat <<'END_OF_main/SLAVE.bat'
  942. Xcl -DDAEMON -Ml -c mail.c
  943. Xcl -DDAEMON -Ml -c call.c
  944. Xcl -DDAEMON -Ml -c email.c
  945. Xcl -DDAEMON -Ml -c file.c
  946. Xcl -DDAEMON -Ml -c screen.c
  947. Xcl -DDAEMON -Ml -c mbox.c
  948. Xcl -DDAEMON -Ml -c desk.c
  949. Xcl -DDAEMON -Ml -c reply.c
  950. Xdel shlib1.lib
  951. Xlib shlib1.lib call.obj email.obj file.obj screen.obj mbox.obj desk.obj reply.obj ;
  952. Xcl -DDAEMON -Ml -c create.c
  953. Xcl -DDAEMON -Ml -c kbdinp.c
  954. Xcl -DDAEMON -Ml -c pager.c
  955. Xcl -DDAEMON -Ml -c window.c
  956. Xcl -DDAEMON -Ml -c setup.c
  957. Xcl -DDAEMON -Ml -c errdisp.c
  958. Xdel shlib2.lib
  959. Xlib shlib2.lib create.obj kbdinp.obj pager.obj window.obj setup.obj errdisp.obj ;
  960. Xcl -DDAEMON -Ml -c invoke.c
  961. Xcl -DDAEMON -Ml -c textcopy.c
  962. Xcl -DDAEMON -Ml -c makework.c
  963. Xcl -DDAEMON -Ml -c mailfile.c
  964. Xcl -DDAEMON -Ml -c deskutil.c
  965. Xdel shlib3.lib
  966. Xlib shlib3.lib invoke.obj textcopy.obj makework.obj mailfile.obj deskutil.obj ;
  967. Xcl -DDAEMON -Ml -c submit.c
  968. Xcl -DDAEMON -Ml -c edit.c
  969. Xcl -DDAEMON -Ml -c alias.c
  970. Xcl -DDAEMON -Ml -c snapshot.c
  971. Xdel shlib4.lib
  972. Xlib shlib4.lib submit.obj edit.obj alias.obj snapshot.obj ;
  973. Xcl -DDAEMON -Ml -c msd_dir.c
  974. Xcl -DDAEMON -Ml -c myalloc.c
  975. Xcl -DDAEMON -Ml -c params.c
  976. Xcl -DDAEMON -Ml -c path.c
  977. Xcl -DDAEMON -Ml -c newseqno.c
  978. Xcl -DDAEMON -Ml -c ascf.c
  979. Xcl -DDAEMON -Ml -c spoolfil.c
  980. Xcl -DDAEMON -Ml -c str.c
  981. Xcl -DDAEMON -Ml -c ms_parse.c
  982. Xdel libgen.lib
  983. Xlib libgen msd_dir.obj myalloc.obj params.obj path.obj newseqno.obj ascf.obj  spoolfil.obj str.obj ms_parse.obj ;
  984. Xcl -F 2000 -Ml -o mail.exe mail.obj -link shlib1.lib shlib2.lib shlib3.lib shlib4.lib libgen.lib ..\termcap\termcap.lib
  985. Xexepack mail.exe junk
  986. Xdel mail.exe
  987. Xren junk mail.exe
  988. Xcl -DDAEMON -Ml -c smail.c
  989. Xcl -DDAEMON -Ml -c unalias.c
  990. Xcl -DDAEMON -Ml -c hsearch.c
  991. Xcl -F 2000 -Ml -o smail.exe smail.obj unalias.obj hsearch.obj -link libgen.lib
  992. Xexepack smail.exe junk
  993. Xdel smail.exe
  994. Xren junk smail.exe
  995. Xcl -DDAEMON -Ml -c nmail.c
  996. Xcl -F 2000 -Ml -o nmail.exe nmail.obj -link libgen.lib
  997. Xexepack nmail.exe junk
  998. Xdel nmail.exe
  999. Xren junk nmail.exe
  1000. Xcl -DDAEMON -Ml -c cmail.c
  1001. Xcl -F 2000 -Ml -o cmail.exe cmail.obj invoke.obj -link libgen.lib
  1002. Xexepack cmail.exe junk
  1003. Xdel cmail.exe
  1004. Xren junk cmail.exe
  1005. END_OF_main/SLAVE.bat
  1006. if test 2066 -ne `wc -c <main/SLAVE.bat`; then
  1007.     echo shar: \"main/SLAVE.bat\" unpacked with wrong size!
  1008. fi
  1009. # end of overwriting check
  1010. fi
  1011. if test -f main/call.c -a "${1}" != "-c" ; then 
  1012.   echo shar: Will not over-write existing file \"main/call.c\"
  1013. else
  1014. echo shar: Extracting \"main/call.c\" \(2300 characters\)
  1015. sed "s/^X//" >main/call.c <<'END_OF_main/call.c'
  1016. X/*++
  1017. X/* NAME
  1018. X/*      call 3
  1019. X/* SUMMARY
  1020. X/*      call remote unix system
  1021. X/* PROJECT
  1022. X/*      pc-mail
  1023. X/* PACKAGE
  1024. X/*      mail
  1025. X/* SYNOPSIS
  1026. X/*      int call()
  1027. X/* DESCRIPTION
  1028. X/*      call() is invoked when the user wants to contact the unix host.
  1029. X/*    It asks for a uucp password. After the user has provided this
  1030. X/*    the password is erased from the screen and the mail server is called
  1031. X/*    by the cico file transfer program. Afterwards, the nmail program is 
  1032. X/*    invoked to extract originator addresses from new mail messages. In 
  1033. X/*    order to force a new mailbox display the current mail display is junked.
  1034. X/* FUNCTIONS AND MACROS
  1035. X/*    kbdinp(), kbdrest(), invoke(), kbdinit(), errdisp(), junk_desk()
  1036. X/* COMMANDS
  1037. X/*      cico    remote login, file transfer
  1038. X/*    nmail    extract originator from new mail
  1039. X/* AUTHOR(S)
  1040. X/*      W.Z. Venema
  1041. X/*      Eindhoven University of Technology
  1042. X/*      Department of Mathematics and Computer Science
  1043. X/*      Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  1044. X/* CREATION DATE
  1045. X/*      Sun Apr  5 18:27:18 GMT+1:00 1987
  1046. X/* LAST MODIFICATION
  1047. X/*    90/01/22 13:01:16
  1048. X/* VERSION/RELEASE
  1049. X/*    2.1
  1050. X/*--*/
  1051. X
  1052. X#include "defs.h"
  1053. X#include "path.h"
  1054. X#include "screen.h"
  1055. X#include "pager.h"
  1056. X#include "mail.h"
  1057. X
  1058. Xhidden int do_call();                /* forward declarations */
  1059. X
  1060. X/* call - set up dialogue for password */
  1061. X
  1062. Xpublic int call()
  1063. X{
  1064. X    static Screen screen[] = {
  1065. X    STRING,    0,              do_call,int_error,
  1066. X    0,    0,              0,
  1067. X    "Press ESC to cancel. Enter password:",
  1068. X    };
  1069. X
  1070. X    kbdinp(screen);                /* ask password */
  1071. X    return(S_REDRAW);                /* say screen has changed */
  1072. X}
  1073. X
  1074. X/* do_call - make the call to a unix host */
  1075. X
  1076. Xstatic int do_call(pwd)
  1077. Xchar   *pwd;
  1078. X{
  1079. X    register int stat;
  1080. X
  1081. X    clrtoeol();                    /* erase password kludge */
  1082. X    patience();                    /* this may take some time */
  1083. X    kbdrest();                    /* reset user tty modes */
  1084. X    ((stat = invokelp(CICO, "-p", pwd, (char *) 0))    /* try to call host */
  1085. X     ||(stat = invokelp(NMAIL, (char *) 0)));    /* try to extract originators */
  1086. X    kbdinit();                    /* set user tty modes */
  1087. X    junk_desk();                /* force new mailbox display */
  1088. X    if (stat) {                    /* check error status */
  1089. X    errdisp(stat);                /* notify user of problem */
  1090. X    return (S_BREAK | S_REDRAW);        /* redisplay, stop caller */
  1091. X    } else {
  1092. X    return (S_BREAK);            /* just stop caller */
  1093. X    }
  1094. X}
  1095. END_OF_main/call.c
  1096. if test 2300 -ne `wc -c <main/call.c`; then
  1097.     echo shar: \"main/call.c\" unpacked with wrong size!
  1098. fi
  1099. # end of overwriting check
  1100. fi
  1101. if test -f main/comm.h -a "${1}" != "-c" ; then 
  1102.   echo shar: Will not over-write existing file \"main/comm.h\"
  1103. else
  1104. echo shar: Extracting \"main/comm.h\" \(1944 characters\)
  1105. sed "s/^X//" >main/comm.h <<'END_OF_main/comm.h'
  1106. X/*++
  1107. X/* NAME
  1108. X/*      comm 5
  1109. X/* SUMMARY
  1110. X/*      cico systems parameters
  1111. X/* PROJECT
  1112. X/*      pc-mail
  1113. X/* PACKAGE
  1114. X/*      cico
  1115. X/* SYNOPSIS
  1116. X/*      #include "params.h"
  1117. X/*      #include "comm.h"
  1118. X/* DESCRIPTION
  1119. X/* .nf
  1120. X
  1121. X /* roles and other behavioural codes */
  1122. X
  1123. X#define MASTER    1            /* who sends files */
  1124. X#define SLAVE    2            /* who receives files */
  1125. X#define DONE    3            /* no more files */
  1126. X
  1127. X#define YES    'Y'
  1128. X#define NO    'N'
  1129. X
  1130. X /* communications parameters (see params.h) */
  1131. X
  1132. X#define COMM_LINE    (comm[P_PORT].strval)
  1133. X#define COMM_RATE    (comm[P_BAUD].strval)
  1134. X#define DIAL_SEQUENCE    (comm[P_DIAL].strval)
  1135. X#define LOGIN_NAME    (comm[P_LOGIN].strval)
  1136. X#define DISC_SEQUENCE    (comm[P_DISC].strval)
  1137. X
  1138. X /* related info */
  1139. X
  1140. Xextern int ttfd;            /* comm. port */
  1141. Xextern Info *comm;            /* comm. info */
  1142. Xextern char *password;            /* password */
  1143. Xextern char rmthost[];            /* remote system name */
  1144. X
  1145. X /* functions that use the above */
  1146. X
  1147. Xextern char *rmtname();            /* make remote spool-file name */
  1148. Xextern char *locname();            /* make local spool-file name */
  1149. X
  1150. X /* protocol function pointers */
  1151. X
  1152. Xextern int (*Read) ();            /* protocol read */
  1153. Xextern int (*Write) ();            /* protocol write */
  1154. Xextern int (*Close) ();            /* protocol close */
  1155. X
  1156. X /* use these at your own risk */
  1157. X
  1158. X#define MSGBUF       4096        /* message buffer size */
  1159. X
  1160. Xextern char msgin[MSGBUF];        /* message receive buffer */
  1161. Xextern char msgout[MSGBUF];        /* message send buffer */
  1162. X
  1163. X /* message i/o functions */
  1164. X
  1165. Xextern int isok();            /* do request; get yes or no */
  1166. Xextern char *talk();            /* send message */
  1167. Xextern char *hear();            /* receive message */
  1168. X
  1169. X/* SEE ALSO
  1170. X/*      comm(3) implementation module
  1171. X/* AUTHOR(S)
  1172. X/*      W.Z. Venema
  1173. X/*      Eindhoven University of Technology
  1174. X/*      Department of Mathematics and Computer Science
  1175. X/*      Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  1176. X/* CREATION DATE
  1177. X/*      Sun Apr 12 13:52:39 GMT+1:00 1987
  1178. X/* LAST MODIFICATION
  1179. X/*    90/01/22 13:01:21
  1180. X/* VERSION/RELEASE
  1181. X/*    2.1
  1182. X/*--*/
  1183. END_OF_main/comm.h
  1184. if test 1944 -ne `wc -c <main/comm.h`; then
  1185.     echo shar: \"main/comm.h\" unpacked with wrong size!
  1186. fi
  1187. # end of overwriting check
  1188. fi
  1189. if test -f main/create.c -a "${1}" != "-c" ; then 
  1190.   echo shar: Will not over-write existing file \"main/create.c\"
  1191. else
  1192. echo shar: Extracting \"main/create.c\" \(2162 characters\)
  1193. sed "s/^X//" >main/create.c <<'END_OF_main/create.c'
  1194. X/*++
  1195. X/* NAME
  1196. X/*    create 3
  1197. X/* SUMMARY
  1198. X/*    create a mail message
  1199. X/* PROJECT
  1200. X/*    pc-mail
  1201. X/* PACKAGE
  1202. X/*    mail
  1203. X/* SYNOPSIS
  1204. X/*    #include "mail.h"
  1205. X/*
  1206. X/*    int create()
  1207. X/* DESCRIPTION
  1208. X/*      Create() creates a template message and invokes an editor.
  1209. X/*    It then passes control to the work_disp() function (the function that
  1210. X/*    lets the user decide on the disposition of the message).
  1211. X/* COMMANDS
  1212. X/*    The program specified in the EDITOR environment variable,
  1213. X/*    or a system-dependent default.
  1214. X/* FILES
  1215. X/*    mail.msg, file being edited in the current directory
  1216. X/*      $MAILDIR/ennnnn, message file (body)
  1217. X/*    $MAILDIR/cnnnnn, meta file (summary)
  1218. X/*    $MAILDIR/header, template mail header file
  1219. X/*    $MAILDIR/trailer, template signature file
  1220. X/* SEE ALSO
  1221. X/*      pager(3), pager(5), kbdinp(3), edit(3)
  1222. X/* AUTHOR(S)
  1223. X/*      W.Z. Venema
  1224. X/*      Eindhoven University of Technology
  1225. X/*      Department of Mathematics and Computer Science
  1226. X/*      Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  1227. X/* CREATION DATE
  1228. X/*    Tue May 12 15:35:20 GMT+1:00 1987
  1229. X/* LAST MODIFICATION
  1230. X/*    90/01/22 13:01:27
  1231. X/* VERSION/RELEASE
  1232. X/*    2.1
  1233. X/*--*/
  1234. X
  1235. X#include <stdio.h>
  1236. X
  1237. X#include "defs.h"
  1238. X#include "path.h"
  1239. X#include "mail.h"
  1240. X#include "status.h"
  1241. X#include "screen.h"
  1242. X
  1243. Xhidden int create_work();        /* forward declaration */
  1244. X
  1245. X/* create - create, edit, and dispose of a mail message */
  1246. X
  1247. Xpublic int create()
  1248. X{
  1249. X    register int stat;
  1250. X
  1251. X    if ((stat = create_work())            /* try to create the message */
  1252. X    || (stat = edit(message, MAILFILE)))    /* try to edit the message */
  1253. X    errdisp(stat);                /* we had a problem */
  1254. X    work_disp("");                /* ask for disposition */
  1255. X    return (S_REDRAW);                /* say screen has changed */
  1256. X}
  1257. X
  1258. X/* create_work - create template mail message */
  1259. X
  1260. Xhidden int create_work()
  1261. X{
  1262. X    register FILE *fp;
  1263. X    register int err;
  1264. X
  1265. X    if (fp = fopen(message, "w")) {
  1266. X    (void) fprintf(fp, "Subject: \n");    /* Subject: line */
  1267. X    (void) textcopy(header_file(), fp);    /* personalized mail header */
  1268. X    putc('\n', fp);
  1269. X    (void) textcopy(trailer_file(), fp);    /* personalized signature */
  1270. X    err = (fflush(fp) || ferror(fp));
  1271. X    (void) fclose(fp);
  1272. X    return (err ? E_WRITERR : 0);
  1273. X    } else {
  1274. X    return (E_WRITERR);
  1275. X    }
  1276. X}
  1277. END_OF_main/create.c
  1278. if test 2162 -ne `wc -c <main/create.c`; then
  1279.     echo shar: \"main/create.c\" unpacked with wrong size!
  1280. fi
  1281. # end of overwriting check
  1282. fi
  1283. if test -f main/defs.h -a "${1}" != "-c" ; then 
  1284.   echo shar: Will not over-write existing file \"main/defs.h\"
  1285. else
  1286. echo shar: Extracting \"main/defs.h\" \(2304 characters\)
  1287. sed "s/^X//" >main/defs.h <<'END_OF_main/defs.h'
  1288. X/*++
  1289. X/* NAME
  1290. X/*      defs 5
  1291. X/* SUMMARY
  1292. X/*      program-independent definitions
  1293. X/* PROJECT
  1294. X/*      pc-mail
  1295. X/* PACKAGE
  1296. X/*      all
  1297. X/* SYNOPSIS
  1298. X/*      #include "defs.h"
  1299. X/* DESCRIPTION
  1300. X/* .nf
  1301. X
  1302. X /* this file is for program-independent definitions */
  1303. X
  1304. Xextern int errno;
  1305. Xextern char *sys_errlist[];
  1306. X
  1307. X#define hidden static            /* for functions local to a module */
  1308. X#define public                /* globally visible functions/data */
  1309. X
  1310. X /*
  1311. X  * Take care of differences between various flavours of C library function
  1312. X  * names. Define macros where functions are missing.
  1313. X  */
  1314. X
  1315. X#if (SIII|SYSV|MSDOS)
  1316. X#   define index strchr
  1317. X#   define rindex strrchr
  1318. X#endif
  1319. X
  1320. X#ifdef    unix
  1321. X#   define rename(from,to) (link(from,to) || unlink(from))
  1322. X#endif
  1323. X
  1324. X /*
  1325. X  * The delay macro is used during the dial-out sequence, e.g. when we are
  1326. X  * sending commands to a modem. It is supposed to produce a short delay of a
  1327. X  * few milliseconds so that the modem can see a small gap between successive
  1328. X  * characters.
  1329. X  */
  1330. X
  1331. X#if (unix||MSDOS)
  1332. X#define delay()    chdir(".")
  1333. X#else
  1334. X"put your delay() definition here"
  1335. X#endif
  1336. X
  1337. X /*
  1338. X  * Standard macros.
  1339. X  */
  1340. X
  1341. X#define    MIN(a,b)    ((a) < (b) ? (a) : (b))
  1342. X#define    MAX(x,y)    ((x) > (y) ? (x) : (y))
  1343. X#define CALL(p)        (*(p))
  1344. X
  1345. X /* library functions with non-default return types */
  1346. X
  1347. Xextern char *strtok();
  1348. Xextern char *fgets();
  1349. Xextern char *strcpy();
  1350. Xextern char *strncpy();
  1351. Xextern char *strcat();
  1352. Xextern char *strncat();
  1353. Xextern char *malloc();
  1354. Xextern char *realloc();
  1355. Xextern void free();
  1356. Xextern char *getenv();
  1357. Xextern char *asctime();
  1358. Xextern long time();
  1359. Xextern char *index();
  1360. Xextern char *rindex();
  1361. Xextern char *memcpy();
  1362. Xextern void exit();
  1363. X
  1364. X /* local utility functions with non-default return types */
  1365. X
  1366. Xextern char *myalloc();
  1367. Xextern char *myrealloc();
  1368. Xextern char *strcons();
  1369. Xextern char *split();
  1370. Xextern char **strvec();
  1371. Xextern char *vecstr();
  1372. X
  1373. X /* maximal length of lines with recipients etcetera */
  1374. X
  1375. X#define    MAXLINE    1024
  1376. X
  1377. X/* SEE ALSO
  1378. X/*      path(5)         system-dependent path names
  1379. X/* AUTHOR(S)
  1380. X/*      W.Z. Venema
  1381. X/*      Eindhoven University of Technology
  1382. X/*      Department of Mathematics and Computer Science
  1383. X/*      Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  1384. X/* CREATION DATE
  1385. X/*      Mon Apr  6 16:58:42 GMT+1:00 1987
  1386. X/* LAST MODIFICATION
  1387. X/*    90/01/22 13:01:28
  1388. X/* VERSION/RELEASE
  1389. X/*    2.1
  1390. X/*--*/
  1391. END_OF_main/defs.h
  1392. if test 2304 -ne `wc -c <main/defs.h`; then
  1393.     echo shar: \"main/defs.h\" unpacked with wrong size!
  1394. fi
  1395. # end of overwriting check
  1396. fi
  1397. if test -f main/kp.h -a "${1}" != "-c" ; then 
  1398.   echo shar: Will not over-write existing file \"main/kp.h\"
  1399. else
  1400. echo shar: Extracting \"main/kp.h\" \(2224 characters\)
  1401. sed "s/^X//" >main/kp.h <<'END_OF_main/kp.h'
  1402. X/*++
  1403. X/* NAME
  1404. X/*    kp 5
  1405. X/* SUMMARY
  1406. X/*    definitions file for k protocol
  1407. X/* PACKAGE
  1408. X/*    uucp across the thenet
  1409. X/* SYNOPSIS
  1410. X/*    #include "kp.h"
  1411. X/* DESCRIPTION
  1412. X/*    The following definitions are made in the file kp.h:
  1413. X/* .nf
  1414. X
  1415. X /* Need stderr definition from stdio.h */
  1416. X
  1417. X#include "stdio.h"
  1418. X
  1419. X /* Symbol Definitions */
  1420. X
  1421. X#define    PACKSIZ     256            /* Packet size sent by this uucico */
  1422. X#define MAXPACKSIZ  1024        /* Maximum packet size I can receive */
  1423. X#define SOH         16            /* Start of header */
  1424. X#define CR          13            /* ASCII Carriage Return */
  1425. X#define    SP          32            /* ASCII Blank */
  1426. X
  1427. X#define MAXTRY      10            /* Times to retry a packet */
  1428. X
  1429. X /* 5 secs timeout interval turns out to be too short, when THEnet is busy */
  1430. X
  1431. X#define TIMEOUT     10            /* Seconds after which I should be
  1432. X                     * timed out */
  1433. X
  1434. X#define TRUE         1            /* Boolean constants */
  1435. X#define FALSE        0
  1436. X
  1437. X#define    NULLP (char*)0            /* NULL pointer */
  1438. X#define    FAIL        -1            /* Read/write return value in case of
  1439. X                     * error */
  1440. X#define    TIME        -2            /* Receive packet return status if
  1441. X                     * timed out */
  1442. X
  1443. X#define    OUT          6            /* Nr. of data bits per char in
  1444. X                     * packet */
  1445. X#define    IN           8            /* Nr. of data bits per byte */
  1446. X#define    STEP         2            /* Difference between previous two */
  1447. X#define    MASK       077            /* Mask for number of data bits in
  1448. X                     * packet */
  1449. X
  1450. X /* Macro Definitions */
  1451. X
  1452. X#define tosix(ch)  (((ch) & MASK) + SP)
  1453. X#define unsix(ch)  (((ch) - SP) & MASK)
  1454. X
  1455. X#define tochar(ch)  ((ch) + SP)
  1456. X#define unchar(ch)  ((ch) - SP)
  1457. X
  1458. X /* intercept system calls in case of non-unix operating systems */
  1459. X
  1460. X#ifndef    unix
  1461. X
  1462. X#define    read        xread
  1463. X#define    write        xwrite
  1464. X#define    alarm(x)    /* nothing */
  1465. X#define    signal(x,y)    /* nothing */
  1466. X#define    DEBUG(x,y,z)    if (dflag >= x) printf(y,z)
  1467. X
  1468. Xextern int dflag;
  1469. X
  1470. X#else
  1471. X
  1472. X#define DEBUG(l,f,s) if (Debug >= l) fprintf(stderr,f,s)
  1473. X
  1474. X /* Declarations */
  1475. X
  1476. Xextern int Debug;            /* Debugging level */
  1477. X
  1478. X#endif
  1479. X/* AUTHOR(S)
  1480. X/*    Wietse Venema
  1481. X/*    Eindhoven University of Technology
  1482. X/*    Department of Mathematics and Computer Science
  1483. X/*    Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  1484. X/* CREATION DATE
  1485. X/*    Mon Feb  3 22:14:23 MET 1986
  1486. X/* LAST MODIFICATION
  1487. X/*    90/01/22 13:01:55
  1488. X/* VERSION/RELEASE
  1489. X/*    2.1
  1490. X/*--*/
  1491. END_OF_main/kp.h
  1492. if test 2224 -ne `wc -c <main/kp.h`; then
  1493.     echo shar: \"main/kp.h\" unpacked with wrong size!
  1494. fi
  1495. # end of overwriting check
  1496. fi
  1497. if test -f main/mailfile.c -a "${1}" != "-c" ; then 
  1498.   echo shar: Will not over-write existing file \"main/mailfile.c\"
  1499. else
  1500. echo shar: Extracting \"main/mailfile.c\" \(1862 characters\)
  1501. sed "s/^X//" >main/mailfile.c <<'END_OF_main/mailfile.c'
  1502. X/*++
  1503. X/* NAME
  1504. X/*      mailfile 3
  1505. X/* SUMMARY
  1506. X/*      mail the file currently being displayed
  1507. X/* PROJECT
  1508. X/*      pc-mail
  1509. X/* PACKAGE
  1510. X/*      mail
  1511. X/* SYNOPSIS
  1512. X/*    #include "mail.h"
  1513. X/*
  1514. X/*      int mailfile()
  1515. X/* DESCRIPTION
  1516. X/*      mailfile() is invoked when the user wants to mail a copy of a
  1517. X/*    file or message to some person. The name of the file is taken
  1518. X/*    from the global string variable message[].
  1519. X/*
  1520. X/*    The user is asked for a destination, the necessary spool files
  1521. X/*    are created and the main menu display is junked.
  1522. X/* FUNCTIONS AND MACROS
  1523. X/*    kbdinp(), junk_desk()
  1524. X/* FILES
  1525. X/*      message and meta file in the spool directory.
  1526. X/* SEE ALSO
  1527. X/*      pager(3), pager(5), kbdinp(3)
  1528. X/* DIAGNOSTICS
  1529. X/*      An error message is displayed in case of problems.
  1530. X/* AUTHOR(S)
  1531. X/*      W.Z. Venema
  1532. X/*      Eindhoven University of Technology
  1533. X/*      Department of Mathematics and Computer Science
  1534. X/*      Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  1535. X/* CREATION DATE
  1536. X/*    Mon Apr  4 13:03:44 MET 1988
  1537. X/* LAST MODIFICATION
  1538. X/*    90/01/22 13:02:06
  1539. X/* VERSION/RELEASE
  1540. X/*    2.1
  1541. X/*--*/
  1542. X
  1543. X#include "defs.h"
  1544. X#include "path.h"
  1545. X#include "screen.h"
  1546. X#include "mail.h"
  1547. X
  1548. Xhidden int queue_mailfile();
  1549. X
  1550. X/* mailfile - ask mail address to send file to */
  1551. X
  1552. Xpublic int mailfile()
  1553. X{
  1554. X    static Screen screen[] = {
  1555. X    STRING,    0,              queue_mailfile, int_error,
  1556. X    0,    0,              when,        getaddr,
  1557. X    };
  1558. X
  1559. X    kbdinp(screen);                /* ask message destination */
  1560. X    return(S_REDRAW);                /* say screen has changed */
  1561. X}
  1562. X
  1563. X/* queue_mailfile - queue a copy to another person */
  1564. X
  1565. Xhidden int queue_mailfile(to)
  1566. Xchar *to;
  1567. X{
  1568. X    register int stat;
  1569. X
  1570. X    if (stat = submit(message,to)) {
  1571. X    errdisp(stat);                /* notify user */
  1572. X    return(S_BREAK|S_REDRAW);        /* say screen has changed */
  1573. X    } else {
  1574. X    junk_desk();                /* say mail box has changed */
  1575. X    return(S_BREAK);            /* terminate caller */
  1576. X    }
  1577. X}
  1578. END_OF_main/mailfile.c
  1579. if test 1862 -ne `wc -c <main/mailfile.c`; then
  1580.     echo shar: \"main/mailfile.c\" unpacked with wrong size!
  1581. fi
  1582. # end of overwriting check
  1583. fi
  1584. if test -f main/makework.c -a "${1}" != "-c" ; then 
  1585.   echo shar: Will not over-write existing file \"main/makework.c\"
  1586. else
  1587. echo shar: Extracting \"main/makework.c\" \(1882 characters\)
  1588. sed "s/^X//" >main/makework.c <<'END_OF_main/makework.c'
  1589. X/*++
  1590. X/* NAME
  1591. X/*      makework 3
  1592. X/* SUMMARY
  1593. X/*      save the file currently being displayed as a work file
  1594. X/* PROJECT
  1595. X/*      pc-mail
  1596. X/* PACKAGE
  1597. X/*      mail
  1598. X/* SYNOPSIS
  1599. X/*    #include "mail.h"
  1600. X/*
  1601. X/*      int makework()
  1602. X/* DESCRIPTION
  1603. X/*      makework() is invoked when the user wants to capture something
  1604. X/*    in a work file (i.e. something that will probably be sent
  1605. X/*    as mail lateron). It asks for a one-line summary (to 
  1606. X/*    identify the work file in the main menu) and creates the
  1607. X/*    the necessary files in the spool directory.
  1608. X/*
  1609. X/*    The name of the source file is taken from the global string
  1610. X/*    message[].
  1611. X/* FUNCTIONS AND MACROS
  1612. X/*    kbdinp(), junk_desk()
  1613. X/* FILES
  1614. X/*      A work file and meta file in the spool directory.
  1615. X/* SEE ALSO
  1616. X/*      pager(3), pager(5), kbdinp(3)
  1617. X/* AUTHOR(S)
  1618. X/*      W.Z. Venema
  1619. X/*      Eindhoven University of Technology
  1620. X/*      Department of Mathematics and Computer Science
  1621. X/*      Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  1622. X/* CREATION DATE
  1623. X/*    Mon Apr  4 12:29:18 MET 1988
  1624. X/* LAST MODIFICATION
  1625. X/*    90/01/22 13:02:10
  1626. X/* VERSION/RELEASE
  1627. X/*    2.1
  1628. X/*--*/
  1629. X
  1630. X#include "defs.h"
  1631. X#include "path.h"
  1632. X#include "screen.h"
  1633. X#include "mail.h"
  1634. X
  1635. Xhidden int install_work();
  1636. X
  1637. X/* makework - ask for an summary for message to work on */
  1638. X
  1639. Xpublic int makework()
  1640. X{
  1641. X    static Screen screen[] = {
  1642. X    STRING,    0,    install_work,    int_error,
  1643. X    0,    0,    0,
  1644. X    getsummary,
  1645. X    };
  1646. X    kbdinp(screen);                /* ask for destination */
  1647. X    return(S_REDRAW);                /* say screen has changed */
  1648. X}
  1649. X
  1650. X/* install_work - install meta file and work copy */
  1651. X
  1652. Xhidden int install_work(summary)
  1653. Xchar   *summary;
  1654. X{
  1655. X    register int stat;
  1656. X
  1657. X    if (stat = workon(message, summary)) {
  1658. X    errdisp(stat);                /* cannot create work file */
  1659. X    return (S_BREAK | S_REDRAW);        /* redisplay, stop caller */
  1660. X    } else {
  1661. X    junk_desk();                /* junk message display */
  1662. X    return (S_BREAK);            /* terminate caller */
  1663. X    }
  1664. X}
  1665. END_OF_main/makework.c
  1666. if test 1882 -ne `wc -c <main/makework.c`; then
  1667.     echo shar: \"main/makework.c\" unpacked with wrong size!
  1668. fi
  1669. # end of overwriting check
  1670. fi
  1671. if test -f main/newseqno.c -a "${1}" != "-c" ; then 
  1672.   echo shar: Will not over-write existing file \"main/newseqno.c\"
  1673. else
  1674. echo shar: Extracting \"main/newseqno.c\" \(1917 characters\)
  1675. sed "s/^X//" >main/newseqno.c <<'END_OF_main/newseqno.c'
  1676. X/*++
  1677. X/* NAME
  1678. X/*      newseqno 3
  1679. X/* SUMMARY
  1680. X/*      generate/extract sequence number for/from spool file
  1681. X/* PROJECT
  1682. X/*      pc-mail
  1683. X/* PACKAGE
  1684. X/*      general
  1685. X/* SYNOPSIS
  1686. X/*    unsigned seqno(s)
  1687. X/*    char *s;
  1688. X/*
  1689. X/*      unsigned newseqno()
  1690. X/* DESCRIPTION
  1691. X/*    seqno() verifies the format of a spool file name and extracts
  1692. X/*    its sequence number. A zero value is returned  if the validation
  1693. X/*    failed.
  1694. X/*
  1695. X/*      newseqno() deduces a new spool file sequence number by looking
  1696. X/*    at the names of all files in the spool directory.
  1697. X/* BUGS
  1698. X/*    A sequence file would be better both for performance, but not
  1699. X/*    for collision detection.
  1700. X/* AUTHOR(S)
  1701. X/*      W.Z. Venema
  1702. X/*      Eindhoven University of Technology
  1703. X/*      Department of Mathematics and Computer Science
  1704. X/*      Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  1705. X/* CREATION DATE
  1706. X/*      Sat Mar 28 18:10:53 GMT+1:00 1987
  1707. X/* LAST MODIFICATION
  1708. X/*    90/01/22 13:02:19
  1709. X/* VERSION/RELEASE
  1710. X/*    2.1
  1711. X/*--*/
  1712. X
  1713. X#include "defs.h"
  1714. X#include "path.h"
  1715. X#include "ndir.h"
  1716. X#include "status.h"
  1717. X
  1718. X/* newseqno - extract sequence number from existing spool file names */
  1719. X
  1720. Xpublic unsigned newseqno()
  1721. X{
  1722. X    register unsigned msgno = 0;
  1723. X    register struct direct *de;
  1724. X    register DIR *dp;
  1725. X    unsigned tmp = 0;
  1726. X
  1727. X    /*
  1728. X     * We cannot terminate when directory access fails: live interrupts in
  1729. X     * the communications-port routines!
  1730. X     */
  1731. X
  1732. X    while ((dp = opendir(maildir)) == 0)
  1733. X     /* void */ ;
  1734. X
  1735. X    /* needs locking mechanism on multi-tasking operating systems */
  1736. X
  1737. X    while (de = readdir(dp)) {
  1738. X    if ((tmp = seqno(de->d_name)) && (tmp > msgno))
  1739. X        msgno = tmp;
  1740. X    }
  1741. X    closedir(dp);
  1742. X    return (msgno + 1);
  1743. X}
  1744. X
  1745. X/* seqno - validate format of spool file name and extract sequence number */
  1746. X
  1747. Xpublic unsigned seqno(s)
  1748. Xchar   *s;
  1749. X{
  1750. X    int     seq;
  1751. X    char    junk;
  1752. X
  1753. X    if (strlen(s) == NAMELEN && sscanf(s + 1, "%u%c", &seq, &junk) == 1)
  1754. X    return (seq);
  1755. X    else
  1756. X    return (0);
  1757. X}
  1758. END_OF_main/newseqno.c
  1759. if test 1917 -ne `wc -c <main/newseqno.c`; then
  1760.     echo shar: \"main/newseqno.c\" unpacked with wrong size!
  1761. fi
  1762. # end of overwriting check
  1763. fi
  1764. if test -f main/pager.h -a "${1}" != "-c" ; then 
  1765.   echo shar: Will not over-write existing file \"main/pager.h\"
  1766. else
  1767. echo shar: Extracting \"main/pager.h\" \(2689 characters\)
  1768. sed "s/^X//" >main/pager.h <<'END_OF_main/pager.h'
  1769. X/*++
  1770. X/* NAME
  1771. X/*    pager    5
  1772. X/* SUMMARY
  1773. X/*    pager for display files, definitions
  1774. X/* PROJECT
  1775. X/*    pc-mail
  1776. X/* PACKAGE
  1777. X/*    mail
  1778. X/* SYNOPSIS
  1779. X/*    #include "pager.h"
  1780. X/* DESCRIPTION
  1781. X/*    The display pager manipulates various lists of line structures.
  1782. X/*    Each line is linked to its predecessor and to its successor.
  1783. X/*
  1784. X/*    Besides the familiar list ops for insert/delete the pager also 
  1785. X/*    provides "read" and "write" operations on lines, and a 
  1786. X/*    sort utility.
  1787. X/* .nf
  1788. X
  1789. X /* externally visible parts of the pager */
  1790. X
  1791. X#define    FORW_SORT    1        /* sort in ascending order */
  1792. X#define    BACK_SORT    2        /* sort in reverse order */
  1793. X
  1794. X#define    PG_NOEND    1        /* suppress '-- end of display --' */
  1795. X
  1796. Xtypedef struct File {
  1797. X    struct Line *head;            /* ptr to first line in file */
  1798. X    struct Line *last;            /* ditto to the last line */
  1799. X    struct Line *top;            /* first one visible on screen */
  1800. X    struct Line *curr;            /* where the cursor sits */
  1801. X    int     opts;            /* option flags */
  1802. X} File;
  1803. X
  1804. Xtypedef struct Line {
  1805. X    struct Line *prev;            /* link to predecessor */
  1806. X    struct Line *next;            /* link to successor */
  1807. X    short   lineno;            /* where it is on the screen */
  1808. X    short   llen;            /* nbr of lines on the screen */
  1809. X    char    line[1];            /* actually, a lot of characters */
  1810. X} Line;
  1811. X
  1812. Xextern File *open_pager();        /* create a new display file */
  1813. Xextern void close_pager();        /* destroys an display file */
  1814. Xextern void appd_pager();        /* appends after current line */
  1815. Xextern void del_pager();        /* delete current line */
  1816. Xextern void ins_pager();        /* inserts before current line */
  1817. Xextern void sort_pager();        /* sorts a file */
  1818. Xextern void set_pager();        /* select display file */
  1819. Xextern char *gets_pager();        /* returns current line */
  1820. Xextern void puts_pager();        /* replaces current line */
  1821. X
  1822. Xextern int cp_pager();            /* copy display file to disk */
  1823. Xextern int pr_pager();            /* copy display file to printer */
  1824. Xextern int rd_pager();            /* permanent file to display file */
  1825. Xextern int ds_pager();            /* current page of current file */
  1826. Xextern int up_pager();            /* handle cursor up request */
  1827. Xextern int dn_pager();            /* handle cursor down request */
  1828. Xextern int pu_pager();            /* handle page up request */
  1829. Xextern int pd_pager();            /* handle page down request */
  1830. Xextern void mesg_pager();        /* copy message array to display file */
  1831. X
  1832. X/* SEE ALSO
  1833. X/*    path(3), window(3), window(5)
  1834. X/* BUGS
  1835. X/*    It looks a lot like an editor, but it isn't.
  1836. X/* AUTHOR(S)
  1837. X/*    W.Z. Venema
  1838. X/*    Eindhoven University of Technology
  1839. X/*    Department of Mathematics and Computer Science
  1840. X/*    Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  1841. X/* CREATION DATE
  1842. X/*    Fri Apr  3 22:06:00 GMT+1:00 1987
  1843. X/* LAST MODIFICATION
  1844. X/*    90/01/22 13:02:23
  1845. X/* VERSION/RELEASE
  1846. X/*    2.1
  1847. X/*--*/
  1848. END_OF_main/pager.h
  1849. if test 2689 -ne `wc -c <main/pager.h`; then
  1850.     echo shar: \"main/pager.h\" unpacked with wrong size!
  1851. fi
  1852. # end of overwriting check
  1853. fi
  1854. if test -f main/params.h -a "${1}" != "-c" ; then 
  1855.   echo shar: Will not over-write existing file \"main/params.h\"
  1856. else
  1857. echo shar: Extracting \"main/params.h\" \(1793 characters\)
  1858. sed "s/^X//" >main/params.h <<'END_OF_main/params.h'
  1859. X/*++
  1860. X/* NAME
  1861. X/*    params 5
  1862. X/* SUMMARY
  1863. X/*    communication parameter definitions
  1864. X/* PROJECT
  1865. X/*    pc-mail
  1866. X/* PACKAGE
  1867. X/*    library
  1868. X/* SYNOPSIS
  1869. X/*    #include "params.h"
  1870. X/* DESCRIPTION
  1871. X/* .nf
  1872. X
  1873. X /*
  1874. X  * Identification strings for the external representation of the setup. The
  1875. X  * parameter setup is stored as a file, with one identification string and
  1876. X  * parameter value per line. The identification strings are the same ones as
  1877. X  * used by the mail shell (the Setup option in the initial screen). The UUCP
  1878. X  * gunk is not compiled in for systems that use daemons for message delivery.
  1879. X  */
  1880. X
  1881. X#define    S_IGNORE    "ignore_header_lines:"
  1882. X#ifndef    DAEMON
  1883. X#define    S_PORT        "communications_port:"
  1884. X#define    S_BAUD        "baud_rate:"
  1885. X#define    S_HOST        "remote_host_name:"
  1886. X#define    S_LOGIN        "login_name:"
  1887. X#define    S_DIAL        "dialup_sequence:"
  1888. X#define    S_DISC        "disconnect_sequence:"
  1889. X#endif
  1890. X
  1891. X /* default values */
  1892. X
  1893. X#define    D_IGNORE    "received message-id"
  1894. X#ifndef    DAEMON
  1895. X#define    D_DISC        "\\0"
  1896. X#endif
  1897. X
  1898. X /* Table offsets for the internal representation */
  1899. X
  1900. X#define    P_IGNORE    0
  1901. X#ifndef    DAEMON
  1902. X#define    P_PORT        1
  1903. X#define    P_BAUD        2
  1904. X#define    P_HOST      3
  1905. X#define    P_LOGIN        4
  1906. X#define    P_DIAL        5
  1907. X#define    P_DISC        6
  1908. X#endif
  1909. X
  1910. X /* Structure of the in-core setup table. */
  1911. X
  1912. Xtypedef struct {
  1913. X    char   *ident;            /* identification string */
  1914. X    int     length;            /* length of id string */
  1915. X    char   *strval;            /* string value of parameter */
  1916. X    char   *defval;            /* default string value */
  1917. X} Info;
  1918. X
  1919. Xextern Info *getparams();        /* read setup file */
  1920. X
  1921. X/* AUTHOR(S)
  1922. X/*    W.Z. Venema
  1923. X/*    Eindhoven University of Technology
  1924. X/*    Department of Mathematics and Computer Science
  1925. X/*    Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  1926. X/* CREATION DATE
  1927. X/*    Wed Apr  8 15:39:23 GMT+1:00 1987
  1928. X/* LAST MODIFICATION
  1929. X/*    90/01/22 13:02:25
  1930. X/* VERSION/RELEASE
  1931. X/*    2.1
  1932. X/*--*/
  1933. END_OF_main/params.h
  1934. if test 1793 -ne `wc -c <main/params.h`; then
  1935.     echo shar: \"main/params.h\" unpacked with wrong size!
  1936. fi
  1937. # end of overwriting check
  1938. fi
  1939. if test -f main/protomsg.c -a "${1}" != "-c" ; then 
  1940.   echo shar: Will not over-write existing file \"main/protomsg.c\"
  1941. else
  1942. echo shar: Extracting \"main/protomsg.c\" \(2333 characters\)
  1943. sed "s/^X//" >main/protomsg.c <<'END_OF_main/protomsg.c'
  1944. X/*++
  1945. X/* NAME
  1946. X/*      protomsg 3
  1947. X/* SUMMARY
  1948. X/*      high-level protocol message exchange 
  1949. X/* PROJECT
  1950. X/*      pc-mail
  1951. X/* PACKAGE
  1952. X/*      cico
  1953. X/* SYNOPSIS
  1954. X/*      int isok(str)
  1955. X/*      char *str;
  1956. X/*
  1957. X/*      char *talk(str)
  1958. X/*      char *str;
  1959. X/*
  1960. X/*      char *hear()
  1961. X/* DESCRIPTION
  1962. X/*      All routines in this module exchange messages via the line
  1963. X/*    protocol agreed upon during communications startup.
  1964. X/*
  1965. X/*      All messages are sent including a null-byte terminator.
  1966. X/*
  1967. X/*      isok() send a request to the remote system and 
  1968. X/*      returns YES or NO according to the Y or N response.
  1969. X/*
  1970. X/*      talk() send a message to the remote system and returns a 
  1971. X/*    pointer to that message.
  1972. X/*
  1973. X/*      hear() reads the next message from the remote system and 
  1974. X/*      returns a pointer to the result.
  1975. X/* FUNCTIONS AND MACROS
  1976. X/*      trap(), debug()
  1977. X/* DIAGNOSTICS
  1978. X/*      isok() and hear() return via longjmp(systrap,E_LOST) in case
  1979. X/*    of timeout or protocol errors.
  1980. X/* BUGS
  1981. X/*      Message storage is in static buffers whose contents are overwritten
  1982. X/*      with each call.
  1983. X/* AUTHOR(S)
  1984. X/*      W.Z. Venema
  1985. X/*      Eindhoven University of Technology
  1986. X/*      Department of Mathematics and Computer Science
  1987. X/*      Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  1988. X/* CREATION DATE
  1989. X/*      Thu Mar 26 16:14:57 GMT+1:00 1987
  1990. X/* LAST MODIFICATION
  1991. X/*    90/01/22 13:02:28
  1992. X/* VERSION/RELEASE
  1993. X/*    2.1
  1994. X/*--*/
  1995. X
  1996. X#include "defs.h"
  1997. X#include "params.h"
  1998. X#include "comm.h"
  1999. X#include "logs.h"
  2000. X#include "status.h"
  2001. X
  2002. X/* isok - send message and get yes/no response */
  2003. X
  2004. Xpublic int isok(msg)
  2005. Xchar *msg;
  2006. X{
  2007. X    register char *s = talk(msg);
  2008. X    register char *r = hear();
  2009. X
  2010. X    if (s[0] == r[0]) {
  2011. X    if (r[1] == 'Y')
  2012. X        return(YES);
  2013. X    if (r[1] == 'N')
  2014. X        return(NO);
  2015. X    }
  2016. X    trap(E_LOST,"PROTOCOL ERROR (expected %cY or %cN, got %s)",s[0],s[0],r);
  2017. X    /* NOTREACHED */
  2018. X}
  2019. X
  2020. X/* talk - send message to other side */
  2021. X
  2022. Xpublic char *talk(str)
  2023. Xchar *str;
  2024. X{
  2025. X    debug(4)("sent \"%s\"\n",str);
  2026. X    if (CALL(Write)(ttfd,str,strlen(str)+1) == -1)
  2027. X    trap(E_LOST,"FAILED (link lost)");
  2028. X    return(str);
  2029. X}
  2030. X
  2031. X/* listen - get message from other side */
  2032. X
  2033. Xpublic char *hear()
  2034. X{
  2035. X    register int nread;
  2036. X
  2037. X    if ((nread = CALL(Read)(ttfd,msgin,MSGBUF)) < 0)
  2038. X    trap(E_LOST,"FAILED (link lost)");
  2039. X    msgin[nread] = '\0';
  2040. X    debug(4)("got \"%s\"\n",msgin);
  2041. X    return(msgin);
  2042. X}
  2043. END_OF_main/protomsg.c
  2044. if test 2333 -ne `wc -c <main/protomsg.c`; then
  2045.     echo shar: \"main/protomsg.c\" unpacked with wrong size!
  2046. fi
  2047. # end of overwriting check
  2048. fi
  2049. if test -f main/rmtname.c -a "${1}" != "-c" ; then 
  2050.   echo shar: Will not over-write existing file \"main/rmtname.c\"
  2051. else
  2052. echo shar: Extracting \"main/rmtname.c\" \(2619 characters\)
  2053. sed "s/^X//" >main/rmtname.c <<'END_OF_main/rmtname.c'
  2054. X/*++
  2055. X/* NAME
  2056. X/*    rmtname 3
  2057. X/* SUMMARY
  2058. X/*    mapping between local and remote spool-file names
  2059. X/* PROJECT
  2060. X/*    pc-mail
  2061. X/* PACKAGE
  2062. X/*    cico
  2063. X/* SYNOPSIS
  2064. X/*    #include "params.h"
  2065. X/*    #include "comm.h"
  2066. X/*
  2067. X/*    char *rmtname(type,msgno)
  2068. X/*    int type;
  2069. X/*    unsigned msgno;
  2070. X/*
  2071. X/*    char *locname(rname)
  2072. X/*    char *rname;
  2073. X/* DESCRIPTION
  2074. X/*    locname() translates a remote spool-file name to one suitable
  2075. X/*    for the local file system. Remote X.* file names are converted
  2076. X/*    to the name of the local null device. All other remote file
  2077. X/*    names are mapped to names of the form n<msgno> in the local
  2078. X/*    spool directory.
  2079. X/*
  2080. X/*    rmtname() constructs a remote spool file name from its arguments,
  2081. X/*    which are a sort of broken-down local spool file name.
  2082. X/*    "type" specifies the type of file (Data or eXecute file).
  2083. X/*    "msgno" holds a sequence number.
  2084. X/*
  2085. X/*    The output for D files is: D.<rmtsys>S<xseq>
  2086. X/*
  2087. X/*    The output for X files is: X.<thissys>X<xseq>
  2088. X/*
  2089. X/*    xseq is the four-digit hexadecimal representation of
  2090. X/*    the sequence number in tail.
  2091. X/* SEE ALSO
  2092. X/*    getwork()
  2093. X/* DIAGNOSTICS
  2094. X/*    rmtname() returns via longjmp(systrap,E_CONFUSED) if its
  2095. X/*    arguments are incorrect.
  2096. X/* BUGS
  2097. X/*    locname() and rmtname() store their result in a static area which
  2098. X/*    is overwritten upon each call.
  2099. X/* AUTHOR(S)
  2100. X/*    W.Z. Venema
  2101. X/*    Eindhoven University of Technology
  2102. X/*    Department of Mathematics and Computer Science
  2103. X/*    Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  2104. X/* CREATION DATE
  2105. X/*    Thu Mar 26 14:08:07 GMT+1:00 1987
  2106. X/* LAST MODIFICATION
  2107. X/*    90/01/22 13:02:30
  2108. X/* VERSION/RELEASE
  2109. X/*    2.1
  2110. X/*--*/
  2111. X
  2112. X#include <stdio.h>
  2113. X
  2114. X#include "defs.h"
  2115. X#include "params.h"
  2116. X#include "comm.h"
  2117. X#include "logs.h"
  2118. X#include "status.h"
  2119. X#include "path.h"
  2120. X
  2121. Xhidden char buf[BUFSIZ];        /* storage for the result */
  2122. X
  2123. X/* rmtname - map local spool file name to remote spool file name */
  2124. X
  2125. Xpublic char *rmtname(type, msgno)
  2126. Xint     type;
  2127. Xunsigned msgno;
  2128. X{
  2129. X    msgno &= 0xffff;                /* truncate to four hex digs */
  2130. X
  2131. X    switch (type) {
  2132. X    case 'd':                    /* data file */
  2133. X    case 'D':                    /* data file */
  2134. X    sprintf(buf, "D.%sS%04x", rmthost, msgno);
  2135. X    return (buf);
  2136. X    case 'x':                    /* execute file */
  2137. X    case 'X':                    /* execute file */
  2138. X    sprintf(buf, "X.%sX%04x", LOGIN_NAME, msgno);
  2139. X    return (buf);
  2140. X    default:                    /* oops */
  2141. X    trap(E_CONFUSED, "INTERNAL ERROR (unexpected file type: %c)", type);
  2142. X    /* NOTREACHED */
  2143. X    }
  2144. X}
  2145. X
  2146. X/* locname - map remote spool-file name to local name */
  2147. X
  2148. Xchar   *locname(rname)
  2149. Xchar   *rname;
  2150. X{
  2151. X    if (strncmp(rname, "X.", 2) == 0) {        /* X. files are ignored */
  2152. X    return (NULLDEV);
  2153. X    } else {                    /* everything else is kept */
  2154. X    return (new_mesg(newseqno()));
  2155. X    }
  2156. X}
  2157. END_OF_main/rmtname.c
  2158. if test 2619 -ne `wc -c <main/rmtname.c`; then
  2159.     echo shar: \"main/rmtname.c\" unpacked with wrong size!
  2160. fi
  2161. # end of overwriting check
  2162. fi
  2163. if test -f main/sysdep.c -a "${1}" != "-c" ; then 
  2164.   echo shar: Will not over-write existing file \"main/sysdep.c\"
  2165. else
  2166. echo shar: Extracting \"main/sysdep.c\" \(1972 characters\)
  2167. sed "s/^X//" >main/sysdep.c <<'END_OF_main/sysdep.c'
  2168. X/*++
  2169. X/* NAME
  2170. X/*    sysdep 5
  2171. X/* SUMMARY
  2172. X/*    other system-dependent routines for MS-DOS or ST
  2173. X/* PROJECT
  2174. X/*    pc-mail
  2175. X/* PACKAGE
  2176. X/*    cico
  2177. X/* SYNOPSIS
  2178. X/*    #include "sysdep.h"
  2179. X/* DESCRIPTION
  2180. X/*    void.
  2181. X/* AUTHOR(S)
  2182. X/*    Some parts taken from uuslave sources written by John Gilmore
  2183. X/*    (gnu@hoptoad.com).
  2184. X/*
  2185. X/*    W.Z. Venema
  2186. X/*    Eindhoven University of Technology
  2187. X/*    Department of Mathematics and Computer Science
  2188. X/*    Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  2189. X/* CREATION DATE
  2190. X/*    Sun Apr 12 17:48:08 GMT+1:00 1987
  2191. X/* LAST MODIFICATION
  2192. X/*    90/01/22 13:02:46
  2193. X/* VERSION/RELEASE
  2194. X/*    2.1
  2195. X/*--*/
  2196. X
  2197. X#include "sysdep.h"
  2198. X
  2199. Xsigint()
  2200. X{
  2201. X    /* Restore terminal settings on dialout line */
  2202. X#ifdef MSDOS
  2203. X    uninit_comm();
  2204. X    reset_tty();
  2205. X#endif
  2206. X#ifdef ST
  2207. X    /* No need to do anything here? */
  2208. X#endif
  2209. X
  2210. X    exit(0);
  2211. X}
  2212. X
  2213. X /*
  2214. X  * MSDOS and ST need some of these routines.  Probably should use the new
  2215. X  * names, but for now...
  2216. X  */
  2217. X
  2218. Xbzero(s, cnt)
  2219. Xregister char *s;
  2220. Xregister int cnt;
  2221. X{
  2222. X    register int i;
  2223. X
  2224. X    for (i = 0; i < cnt; i++) {
  2225. X    *s++ = '\0';
  2226. X    }
  2227. X}
  2228. X
  2229. Xbcopy(from, to, cnt)
  2230. Xregister char *from;
  2231. Xregister char *to;
  2232. Xregister int cnt;
  2233. X{
  2234. X    register int i;
  2235. X
  2236. X    for (i = 0; i < cnt; i++) {
  2237. X    *to++ = *from++;
  2238. X    }
  2239. X}
  2240. X
  2241. X#ifdef MSDOS
  2242. X /*
  2243. X  * MSDOS routines for handling the comm port.
  2244. X  * 
  2245. X  * get_time() fills timetype structure n with current time using DOS interrupt
  2246. X  * 21
  2247. X  * 
  2248. X  */
  2249. X
  2250. Xget_time(n)
  2251. XTIME_PTR n;
  2252. X{
  2253. X    union REGS inregs;
  2254. X    union REGS outregs;
  2255. X
  2256. X    inregs.h.ah = 0x2c;                /* Please make a #define for
  2257. X                         * this, Tim */
  2258. X
  2259. X    int86(0x21, &inregs, &outregs);        /* Please #define the 0x21
  2260. X                         * too */
  2261. X
  2262. X    n->hour = outregs.h.ch;
  2263. X    n->minute = outregs.h.cl;
  2264. X    n->sec = outregs.h.dh;
  2265. X    n->hsec = outregs.h.dl;
  2266. X
  2267. X    return (0);
  2268. X}
  2269. X
  2270. Xsleep(x)
  2271. Xint     x;
  2272. X{
  2273. X    int     i;
  2274. X    unsigned s;
  2275. X    TIME    n;                /* current time record */
  2276. X
  2277. X    i = 0;
  2278. X    get_time(&n);
  2279. X    s = n.sec;
  2280. X
  2281. X    while (i < x) {
  2282. X    while (s == n.sec)
  2283. X        get_time(&n);
  2284. X    s = n.sec;
  2285. X    ++i;
  2286. X    }
  2287. X}
  2288. X#endif
  2289. END_OF_main/sysdep.c
  2290. if test 1972 -ne `wc -c <main/sysdep.c`; then
  2291.     echo shar: \"main/sysdep.c\" unpacked with wrong size!
  2292. fi
  2293. # end of overwriting check
  2294. fi
  2295. if test -f main/window.h -a "${1}" != "-c" ; then 
  2296.   echo shar: Will not over-write existing file \"main/window.h\"
  2297. else
  2298. echo shar: Extracting \"main/window.h\" \(2149 characters\)
  2299. sed "s/^X//" >main/window.h <<'END_OF_main/window.h'
  2300. X/*++
  2301. X/* NAME
  2302. X/*    window 5
  2303. X/* SUMMARY
  2304. X/*    window definitions
  2305. X/* PROJECT
  2306. X/*    pc-mail
  2307. X/* PACKAGE
  2308. X/*    mail
  2309. X/* SYNOPSIS
  2310. X/*    #include "window.h"
  2311. X/* DESCRIPTION
  2312. X/*    The macros and variables defined here are used for window
  2313. X/*    manipulation.
  2314. X/* .nf
  2315. X
  2316. X /*
  2317. X  * A "window" is a rectangular region that extends from the left-hand side
  2318. X  * of the screen all the way to the right-hand side.
  2319. X  */
  2320. X
  2321. Xtypedef struct win {
  2322. X    short   base;            /* offset (lines) from top of screen */
  2323. X    short   size;            /* number of lines */
  2324. X    short   x;                /* current column (from the left) */
  2325. X    short   y;                /* current row (from the top) */
  2326. X} WIN;
  2327. X
  2328. Xextern WIN wins[];
  2329. X
  2330. X /* window selection macros */
  2331. X
  2332. X#define    topwin    (wins+0)        /* top window */
  2333. X#define    midwin    (wins+1)        /* middle window */
  2334. X#define    botwin    (wins+2)        /* bottom window */
  2335. X
  2336. Xextern int CO,                /* columns on screen */
  2337. X        LI;                /* lines on screen */
  2338. X
  2339. X /* function-key codes */
  2340. X
  2341. Xextern char *KU,            /* up-arrow */
  2342. X       *KD,                /* down-arrow */
  2343. X       *KL,                /* left-arrow */
  2344. X       *KR,                /* right-arrow */
  2345. X       *PU,                /* page up */
  2346. X       *PD;                /* page down */
  2347. X
  2348. X /* codes to turn on/off keypad, if you have one */
  2349. X
  2350. Xextern char *KS,            /* keypad on */
  2351. X       *KE;                /* keypad off */
  2352. X
  2353. X /* functions that write to windows */
  2354. X
  2355. Xextern void wininit();            /* init the window manipulator */
  2356. Xextern int printcl();            /* erase line, then print */
  2357. Xextern int printat();            /* print line */
  2358. Xextern void setwin();            /* set focus and cursor */
  2359. Xextern int wputc();            /* print character to window */
  2360. Xextern int wputs();            /* print string to window */
  2361. Xextern void clrtoeol();            /* erase to end of line */
  2362. Xextern void clrtobot();            /* clear to screen bottom */
  2363. Xextern void beep();            /* ring the bell */
  2364. X
  2365. X#ifdef unix
  2366. Xextern int fputchar();            /* put a character on stdout */
  2367. X#endif
  2368. X
  2369. X/* SEE ALSO
  2370. X/*    window(3)    window manipulator
  2371. X/* AUTHOR(S)
  2372. X/*    W.Z. Venema
  2373. X/*    Eindhoven University of Technology
  2374. X/*    Department of Mathematics and Computer Science
  2375. X/*    Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  2376. X/* CREATION DATE
  2377. X/*    Wed Apr  1 21:14:53 GMT+1:00 1987
  2378. X/* LAST MODIFICATION
  2379. X/*    90/01/22 13:02:57
  2380. X/* VERSION/RELEASE
  2381. X/*    2.1
  2382. X/*--*/
  2383. END_OF_main/window.h
  2384. if test 2149 -ne `wc -c <main/window.h`; then
  2385.     echo shar: \"main/window.h\" unpacked with wrong size!
  2386. fi
  2387. # end of overwriting check
  2388. fi
  2389. if test -f termcap/console.c -a "${1}" != "-c" ; then 
  2390.   echo shar: Will not over-write existing file \"termcap/console.c\"
  2391. else
  2392. echo shar: Extracting \"termcap/console.c\" \(2306 characters\)
  2393. sed "s/^X//" >termcap/console.c <<'END_OF_termcap/console.c'
  2394. X/*++
  2395. X/* NAME
  2396. X/*      console 3
  2397. X/* SUMMARY
  2398. X/*      encoded ibm pc console terminal capabilities
  2399. X/* PROJECT
  2400. X/*       ms-dos/unix compatibility
  2401. X/* PACKAGE
  2402. X/*      termcap
  2403. X/* SYNOPSIS
  2404. X/*      #include "termcap.h"
  2405. X/* DESCRIPTION
  2406. X/*      The terminal capabilities for the ibm pc ANSI.SYS console driver
  2407. X/*      are stored in a static data structure named "_console". 
  2408. X/*      User access proceeds through the tget{num|str|flag} functions.
  2409. X/*
  2410. X/*      The escape character at the start of function key codes are
  2411. X/*      imaginary; the PC hardware actually returns a nul byte.
  2412. X/* SEE ALSO
  2413. X/*      tgetnum(3), tgetstr(3), tgetflag(3).
  2414. X/*      termcap(3), Berkeley extensions to UNIX.
  2415. X/* FILES
  2416. X/*      ANSI.SYS, ibm pc console driver.
  2417. X/* AUTHOR(S)
  2418. X/*      W.Z. Venema
  2419. X/*      Eindhoven University of Technology
  2420. X/*      Department of Mathematics and Computer Science
  2421. X/*      Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  2422. X/* CREATION DATE
  2423. X/*      Wed Jan  1 19:01:13 GMT+1:00 1986
  2424. X/* LAST MODIFICATION
  2425. X/*      90/01/22 13:56:58
  2426. X/* VERSION/RELEASE
  2427. X/*      2.1
  2428. X/*--*/
  2429. X
  2430. X#include "termcap.h"
  2431. X
  2432. XCap     _console[] = {
  2433. X    "am", 0,                /* auto CR-LF at right margin */
  2434. X    "bs", 0,                /* terminal can backspace */
  2435. X    "cd", "\033[J",            /* clear to end of screen */
  2436. X    "ce", "\033[K",            /* clear to end of line */
  2437. X    "cl", "\033[;H\033[2J",        /* clear whole screen */
  2438. X    "cm", "\033[%i%d;%dH",        /* cursor movement */
  2439. X    "co", "80",                /* nbr of columns on screen */
  2440. X    "cr", "\r",                /* carriage-return */
  2441. X    "do", "\033[B",            /* cursor down */
  2442. X    "ku", "\033H",            /* up-arrow key */
  2443. X    "kd", "\033P",            /* down-arrow key */
  2444. X    "kl", "\033L",            /* left-arrow key */
  2445. X    "kr", "\033N",            /* right-arrow key */
  2446. X    "le", "\010",            /* cursor left */
  2447. X    "li", "25",                /* nbr of lines on screen */
  2448. X    "nd", "\033[C",            /* cursor right */
  2449. X    "nl", "\n",                /* linefeed character */
  2450. X    "pt", "",                /* has hardware tabs */
  2451. X    "PU", "\033I",            /* page up key (non-std code) */
  2452. X    "PD", "\033Q",            /* page down key (non-std code) */
  2453. X    "se", "\033[m",            /* end standout mode */
  2454. X    "so", "\033[1m",            /* enter standout (bold) mode */
  2455. X    "ue", "\033[m",            /* end underscore mode */
  2456. X    "up", "\033[A",            /* cursor up */
  2457. X    "us", "\033[4m",            /* enter underscore mode */
  2458. X    0, 0,                /* terminator */
  2459. X};
  2460. END_OF_termcap/console.c
  2461. if test 2306 -ne `wc -c <termcap/console.c`; then
  2462.     echo shar: \"termcap/console.c\" unpacked with wrong size!
  2463. fi
  2464. # end of overwriting check
  2465. fi
  2466. echo shar: End of archive 2 \(of 11\).
  2467. cp /dev/null ark2isdone
  2468. MISSING=""
  2469. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  2470.     if test ! -f ark${I}isdone ; then
  2471.     MISSING="${MISSING} ${I}"
  2472.     fi
  2473. done
  2474. if test "${MISSING}" = "" ; then
  2475.     echo You have unpacked all 11 archives.
  2476.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2477. else
  2478.     echo You still need to unpack the following archives:
  2479.     echo "        " ${MISSING}
  2480. fi
  2481. ##  End of shell archive.
  2482. exit 0
  2483.  
  2484.